[Lazarus] Message Loop paused when no interaction with mouse?
Henry Vermaak
henry.vermaak at gmail.com
Wed Apr 20 13:21:53 CEST 2011
On 20/04/11 11:55, Bernd wrote:
> 2011/4/20 Henry Vermaak<henry.vermaak at gmail.com>:
>
>> See here for a related issue:
>>
>> http://bugs.freepascal.org/view.php?id=13120
>>
>> You'll have to wake up the main thread after the frame (which is what your
>> timer is doing). For gtk you can use
>> g_main_context_wakeup(g_main_context_default), for qt there is
>> QEventLoop::wakeUp().
>
> Thank you, this is what I have read a while ago but could not find
> anymore due to the wrong serch terms.
>
> But it does not seem to help :-(
Hmm, that's strange. This works for me. I've written a c lib that
notifies me of usb devices getting plugged in. The callback from the
lib looks like this:
procedure NotifyPlug(status: cint); cdecl;
begin
Application.QueueAsyncCall(@Form1.NotifyAsync, status);
{$ifdef lclgtk2}
g_main_context_wakeup(g_main_context_default);
{$else}
PostMessage(Form1.Handle, LM_PAINT, 0, 0);
{$endif}
end;
Does it make a difference if you define usecthreads? Perhaps you can
try postmessage, too, just to rule out a bug with the QueueAsyncCall
implementation. Postmessage (at least on gtk) will wake up the main
thread (make sure you define usecthreads for this, though).
Henry
More information about the Lazarus
mailing list