Re: MainLoop & 100% CPU
- From: "Kuang-Chun Cheng" <kcc1967 gmail com>
- To: "Tor Lillqvist" <tml iki fi>
- Cc: gtk-list gnome org
- Subject: Re: MainLoop & 100% CPU
- Date: Fri, 23 Nov 2007 17:48:21 +0800
On Nov 23, 2007 3:52 PM, Tor Lillqvist <
tml iki fi> wrote:
> int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR
> lpCmdLine, int nCmdShow)
Please don't unnecessarily use WinMain(), it only confuses matters,
and can make people think it is significant for the problem. (It
isn't)
> {
> GMainLoop *MainLoop = NULL;
>
> MainLoop = g_main_loop_new(NULL, TRUE);
> g_main_loop_run(MainLoop);
> }
> Even this minimalist program eats 100% CPU.
Well, you haven't added any event source to the main loop. What do you
expect the code to do? Sure, on Windows GLib gets stuck in a loop and
on Linux it apparently just hangs forever instead, and it probably
could be argued that it should just hang forever on Windows, too, but
from a functionality perspective, what is the difference? In both
cases, the code will forever be doing nothing.
Totally agree :-)
I usually add a g_usleep() idle callback which also provide a heartbeat info
for my application. This way, at least the main loop is doing something :-)
The g_usleep() could be 5 sec, 10 sec ... don't matter. If it's long enough,
it won't hurt any performance.
KC
On Linux it will call poll(NULL, 0, -1) which hangs forever. I can't
see this behaviour documented in the poll(2) manpage, though. The
g_poll() function used in GLib on Windows to "emulate" poll() just
returns immediately if there is nothing to wait for. I guess it would
be easy to change that to make it hang forever instead. I can't say I
am convinced that would be more correct, though.
--tml
_______________________________________________
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]