2009/2/18 Richard Frith-Macdonald <[email protected]>

>
> On 17 Feb 2009, at 22:38, Julien Isorce wrote:
>
>
>> Unfortunately, I am in a case where I cannot manage the C main loop (I
>> cannot configure it and I cannot start it).
>> I am implemting a plugin interface which lead to a shared library.
>> This library is loaded by the main program and I have not access to the
>> code of this main program and so I cannot have access to the code
>> which runs the C main loop.
>> It's like the concept of plugins work in some cases. But I am sure my
>> first description was a little bit confusing.
>> In other word I cannot see how the periodic function could be called in an
>> other thread than the main one.
>>
>> So I still have access to 3 functions, init, periodic func, and deinit.
>> Each one is called in the main thread.
>> I have a NSWindow created in the init function.
>> What I need is to run the cocoa main loop ( [NSApp run] )  the handle
>> messages of this window.
>> I cannot run it in one of those 3 functions ( init, periodic func, and
>> deinit), because [NSApp run] is blocking. And I must not block
>> the C main loop.
>> So I do not know where I can run it, because it seems it's not possible to
>> run it in an other thread than the main thread (according to the
>> documentation).
>>
>
> Ah ... if you can't start the C loop yourself, so you are forced to run the
> NSApp loop in another thread, then you need ot make sure that the thread you
> run the NSApp loop in is the 'main' thread as far as GNUstep is concerned.
> This means you cannot use NSThread to create the thread.
> You need to use plain C code and the native threading API to create a
> second thread from within the init function.
> In that second thread you would call GSRegisterCurrentThread() so that
> gnustep kows about it and would consider it the 'main' thread.
>
> Then, once the gnustep thread is initialised as the 'main' thread, you also
> need to register the C loop's thread (perhaps the first time the periodic
> function is called) by calling GSRegisterCurrentThread() there too.
>
> Once both threads are registered, it should be possible for the period
> function in the 'C' thread to call gnustep code in the 'gnustep' thread by
> using the preformInMainThread:... methods.
>

Hi,

I tried you suggestion and it seems to be fine. I have not tested the full
things I need but the minimum is working.
Thx for that.

I have 2 questions:

--First, why I have to use preformInMainThread ? The 'C' thread is
registered so ...
 Maybe because " [NSApplication sharedApplication] " has to be called in the
second thread.
I tried to call it in the 'C' thread without any success.

--Second, "GSRegisterCurrentThread()" is a function specific to GNUstep.
And this function is not available using Apple developper environment. So I
will not be able to compile my code in there.
Any comment?

Sincerely

Julien
_______________________________________________
Bug-gnustep mailing list
[email protected]
http://lists.gnu.org/mailman/listinfo/bug-gnustep

Reply via email to