Greetings,
 
I have a proprietary library that has both Windows and Linux ports.  The
Windows DLL has problems running on Wine, so I have created a builtin version
of this DLL in Wine.  This has worked fine, except for one function that
basically creates a new thread and fires back events to the calling Window
application.  I believe I have traced this down to the Linux version of the
library creating the new thread with pthread_create.  
 
Windows.exe
 
 
Call_dll_to_spawn_thread_and_register_callback(MyCallbackfunc);
 
Windows DLL implemented in wine:
 
                void * NewThread(void *p)
                {
                                MyParams *params = (MyParams *)p;
                                for (i = 0; i < 500000; i++)
                                                p->Callback();
                }
 
                void Call_dll_to_spawn_thread_and_register_callback(void
(*callback)())
                {
                                MyParams *params = (MyParams
*)malloc(sizeof(MyParams));
                                params->Callback = callback;
                                pthread_create(&MyThread, NULL, NewThread,
(void *)params);
                }
 
If instead of using pthread_create I use CreateThread, I never have a
problem.   I notice no other wine DLLs are using pthread_create and I have
seen hints that this might not work.  If so, how do I use the Linux library.
(Call_dll_to_spawn_thread_and_register_callback is just simulating what the
Linux library would do)
 
Do I create a separate thread using CreateThread to communicate back to the
Window application, so that Call_dll_to_spawn_thread_and_register_callback
effectively creates two threads, one using CreateThread (Wine DLL), one using
pthread_create (Linux Library) and then do synchronization between the two?
 
Any help, suggestion, ideas, questions would be greatly appreciated.
 
Phil