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