[Lazarus] GTK2 threading

Anton Kavalenka anton.k at tut.by
Mon Mar 25 14:34:04 CET 2013


On 25.01.2013 14:51, Mattias Gaertner wrote:
> Anton Kavalenka <anton.k at tut.by> hat am 25. Januar 2013 um 12:21 geschrieben:
>
>> On 23.01.2013 11:44, Michael Schnell wrote:
>>
>>       > >      On 01/22/2013 06:52 PM, Anton Kavalenka wrote:
>>>           > > >
>>>>           But GTK Widgetset uses pure Xlib calls for determining keyboard
>>>> states.
>>>>           Xlib thread-safety is not initialized in GTK2 widgetset.
>>>>
>>>>       > >      AFAIK: As the GUI and Event-queue  related LCL classes (i.e.
>>>>       > > TApplication) are not thread save themselves (e.g. using global
>>>>       > > variables). It does not make sense to attach to the System's
>>>>       > > Widget set in a thread safe way.
>>>       To allow for multiple GUI threads a major update of the appropriate LCL
>>> functions would be necessary, so that multiple threads can create their own
>>> dedicated TApplication instances.
>>>
>>>       -Michael
>>>
>>>   > Dear Michael!
>>   The problem is in LCL implementation itself, not in event queuing.
> I guess, Michael meant, that the LCL only accesses the widgetset via the main
> thread and therefore should not need any thread control.
> But the LCL does not check if it is called by another thread. So you can shoot
> yourself in the foot by doing so.
>
>
>>   Real life example:
>>
>>   Off-screen composing is made into TBitmap.
>>   Screen update is made via Synchronize() call or sending a message to the
>> control (it does not matter).
>>   This approach works both in Win32/64 and Carbon.
>>
>>   But in LCL-GTK:
>>   Getting and setting bitmap data invoke GTK and Xlib calls.
>>   If it were pure GTK - all would be OK.
>>   GTK is thread-safe and uses mutexes internally.
>>
>>   X is also thread-safe (as soon XInitThreads called).
>>   But currently LCL-GTK is a mix of Xlib and GTK calls, and threading for XLib
>> is NOT initialized.
>>
>>   The described example works until i click the form.
>>   This beaks X-message flow.
>>   GTK does not block Xlib and vice versa.
> Can you give me the bug report link?
>
>
>
Was reported in bug-tracker
http://bugs.freepascal.org/view.php?id=24120

with best regards,
Anton

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.lazarus-ide.org/pipermail/lazarus/attachments/20130325/f6691074/attachment-0002.html>


More information about the Lazarus mailing list