CEvent instance shared between apps ?
Hello experts,
I am using MS VC 6.0 and Vista.
I am developing a dialog-based application. This application create a
thread using AfxBeginThread.
I need to be able to exit the new thread when clicking a button.
/////////////////////////////
MyAppDlg::OnStart()
{ // The user clicks a button to start a new thread
...
// the list of param I pass to the controlling function
static unsigned long ThreadParam[3];
// CEvent StopEvent is declared in MyAppDlg.h as "protected"
ResetEvent(StopEvent);
ThreadParam[0]=(unsigned long)&StopEvent;
// Begin the thread
AfxBeginThread((AFX_THREADPROC)MyControllingFunction,
(LPVOID)ThreadParam,THREAD_PRIORITY_NORMAL,0,0,NULL);
...
}
/////////////////////////////
MyAppDlg::OnStop()
{ // The user clicks a button to exit the new thread
SetEvent(StopEvent);
}
/////////////////////////////
I pass to the controlling function a pointer to the CEvent instance,
that I use to exit the thread.
Notice that the controlling function is global, not a static member of
MyAppDlg class.
/////////////////////////////
UINT MyControllingFunction(LPVOID ThreadParam)
{
HANDLE *pStopEvent=(HANDLE*)ThreadParam[0];
do
{
...
} while (WaitForSingleObject(*pStopEvent,100) != WAIT_OBJECT_0);
....
}
/////////////////////////////
This works great, except when I run multiple instances of my
application on the same
computer. When I click the "Stop" button of one app to exit its
thread, the other threads created by the
other applications stop too! I would not expect the CEvent object
being shared by the apps!
What did I do wrong?
I also declared the controlling function as a static member of
MyAppDlg, with the same result :(