Also, Rob, if you plan to set the value of running outside of the loop that
to make it a volatile variable to force the optimizer to check it each time.
Sorry, here's an extract of my code:
//Declaration:
static UINT MyThreadProc(LPVOID p);
void MyThreadProc();
volatile BOOL running;
// begin thread when user presses Go
void CSmartTimerDlg::OnGo()
{
.
.
.
running = TRUE;
AfxBeginThread(MyThreadProc, this);
}
UINT CSmartTimerDlg::MyThreadProc(LPVOID p)
{
CSmartTimerDlg * me = (CSmartTimerDlg *)p;
me->MyThreadProc();
return 0;
}
void CSmartTimerDlg::MyThreadProc()
{
processing code here
}
//When user presses clear button to cancel on dialog box, end thread
void CSmartTimerDlg::OnClear()
{
running = FALSE;
}
"Joseph M. Newcomer" <newcomer@flounder.com> wrote in message
news:t7j0231los01ru48681skt8bv4ockp12tt@4ax.com...
See below...
On Sat, 14 Apr 2007 10:43:30 +1000, "Rob" <millerman@ozemail.com.au>
wrote:
Hi,
Thanks to all those who offered advise on my last query. I successfully
used
the worker thread method to give control back to the dialog box whilst
background processing was being carried out.
The issue I have now is closing that thread externally. The method I've
used
to create the thread uses a volatile boolean variable. Whilever it is set
to
TRUE, the thread remains alive. However, when I set the variable to FALSE
from the calling process (user wants to end processing), it has no
effect.
The thread continues to run.
****
This is one of the most common paradigms for shutting down a thread. So
it should work;
show your code.
joe
****
I thought that declaring the variable as 'volatile' would allow for the
thread to be closed externally. What else do I need to do to?
Thanks,
Rob
Joseph M. Newcomer [MVP]
email: newcomer@flounder.com
Web: http://www.flounder.com
MVP Tips: http://www.flounder.com/mvp_tips.htm