Re: stop Thread problem
Hello CDG,
"cdg" <anyone@anywhere.com> wrote in message
news:EPemg.261775$5Z.163229@dukeread02...
Could someone help with another problem I am having with a worker thread
program.
The program uses a Start button to call the worker thread. And there is
also a Stop button if it is necessary to immediately stop the thread. And
I
thought the correct way to do this would be to use a volatile bool
variable
in the Stop button. However, I have found that it causes an compiler error
when using the bool variable in the static function of the worker thread.
And I tried to make the volatile bool variable, static also but that
causes
a compiler error. So, what would the correct solution be to stopping the
thread (or a loop in the thread) with a Stop button.
Sounds reasonable, except for the volatile and other modifiers.
Your use of a boolean flag is fine. The variable needs to be accessible
by the CThreadTestDlg object and Thread1. Perhaps the easiest way,
though not a great one, is to make "running" a global value. A much better
way to restrict access would be to place "running" inside the CThreadTestDlg
class. Then add a pointer to "running" to your threadinputs value.
I usually add another value, such as (bool IsRunning) to the thread inputs.
The thread sets/resets the flag as needed. This allows your calling code
to determine when the Stop Button should be displayed.
David
The code below is not complete but it shows the problem.
void CThreadTestDlg::OnStart() //start button
{
AfxBeginThread(Thread1, threadinputs);
running = TRUE;
}
void CThreadTestDlg::OnStop() //stop button
{
running = FALSE;
}
UINT CThreadTestDlg::Thread1(LPVOID lParam)
{
for(int i=0; i<Num; ++i)
{
"function call statements here"
if(running == FALSE)
{
return 0;
}
else
continue;
}
return 0;
}