Axel Simon <axel.si...@ens.fr> writes:

> On Nov 8, 2009, at 19:41, Andy Stewart wrote:
>
>> Hi Axel,
>>
>> Now i try to write some multi-process program, so i need use NamedPipe
>> to communication with those processes (ParentProcess and  
>> ChildProcess).
>> And i need use multi-thread to do concurrent in process, example,  
>> some thread to
>> paint UI, some thread to communication with other process through
>> NamedPipe.
>>
>> But i saw you write below notes on gtk2hs homepage:
>>
>> ------------------------------> notes start  
>> <------------------------------
>> A note of caution: Using Gtk2Hs together with the -threaded ghc is
>> currently not supported. The reason is that GHC’s garbage collector
>> might free Xlib or Win32 objects using an OS thread different to  
>> the one
>> that is used to execute all other Gtk+ functions. The result will be a
>> program that occasionally fails with an Xlib error or a crash on
>> Windows. We are working on fixing this.
>> ------------------------------> notes end    
>> <------------------------------
>>
>> So it's a big problem in linux? When you said *occasionally* fails.
>
> It affects Linux as well as Windows.
>
>> Is it easy to fix?
>
> It's not clear what the best fix is. The problem is that finalizers  
> of objects are called by the GC using a thread that might be  
> different from the thread that runs the Gtk+ main loop. Indeed, the  
> Gtk+ main loop might be running while the GC finalizes some objects  
> that may thereby release Xlib or Win32 resources. This creates calls  
> to Xlib or Win32 that are concurrent with respect to whatever the Gtk 
> + main loop does. We need to avoid this and it is not clear what the  
> best way is.
>
>> Can you give me some suggestions before i write multi-threads program?
>
> The best way for now is to try to write a program that does not need  
> the -threaded flag of ghc, i.e. to write a program that does not use  
> blocking C calls. I don't know if that is an option when you need  
> named pipes. In any way, I think we can fix the problem before the  
> next release.
If we don't use -threaded flag of ghc, we just can use `forkIO` (Haskell
threads) `timeoutAddFull`, even `timeoutAddFull` isn't
natural way to implement multi-threads.

If we don't calling Gtk+ C functions in forkOS, forkOS will works?
If that's right, we can just forkIO with Gtk+ calling and forkOS with
others non-Gtk+ calling.

BTW, which way is natural way to fix this problem? 
GHC concurrent GC or gtk2hs side?

If just wrap some gtk2hs functions will fix this problem, i want to stop
current work and help you fix and test, i need refactory my project with
multi-thread support.

Cheers,

  -- Andy


------------------------------------------------------------------------------
Let Crystal Reports handle the reporting - Free Crystal Reports 2008 30-Day 
trial. Simplify your report design, integration and deployment - and focus on 
what you do best, core application coding. Discover what's new with
Crystal Reports now.  http://p.sf.net/sfu/bobj-july
_______________________________________________
Gtk2hs-devel mailing list
Gtk2hs-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/gtk2hs-devel

Reply via email to