Right now I am just starting with a very simple example – no fancy stuff – just a single thread to demonstrate a sequence that updates a counter 20 times per second.
//---- First example: Using global vars and fn
int gnCurValue;
int gnMaxValue;
BOOL gfStopNow;
UINT MyThreadProc( LPVOID pParam )
{
while ( !gfStopNow && (gnCurValue < gnMaxValue) ) {
gnCurValue++;
Sleep( 50 ); // would do some work here
}
return(1);
}
void CThreadDlg::OnBnClickedStart()
{
gnCurValue= 0;
gnMaxValue= 5000;
gfStopNow= 0;
m_ctlStatus.SetWindowText("Starting...");
SetTimer( 1234, 333, 0 ); // 3 times per second
AfxBeginThread( MyThreadProc, 0 ); // <<== START THE THREAD
}
void CThreadDlg::OnBnClickedStop()
{
gfStopNow= TRUE;
KillTimer( 1234 );
m_ctlStatus.SetWindowText( "STOPPED" );
}
void CThreadDlg::OnTimer(UINT_PTR nIDEvent)
{
CString sStatusMsg;
sStatusMsg.Format("Running: %d", gnCurValue );
m_ctlStatus.SetWindowText( sStatusMsg );
CDialog::OnTimer(nIDEvent);
}
Sample Visual Studio 2003 code here: Thread.zip