Problem with MFC Thread
Hi everyone,
I've created a MFC Dialog with a Progress Bar Control, a Stop Button
and a Start Buttton.The idea is to start the progress bar Control by
clicking on the Start Button and I would like to pause (Stop Button)
the process at anytime and continue it when I click on the Start
Button again.
I 'm able to stop the process of the Progress Bar but when I try to
continue the process the whole thing crash...
Here is how my code looks like:
// CProgressBarExampleDlg.h
class CProgressBarExampleDlg : public CDialog
{
public :
CProgressBarExampleDlg(CWnd* pParent = NULL);
UINT Execute(); // here should be the process of the Progress Bar
executed
static UINT WorkerThreadLauncher(LPVOID pvParam);
HANDLE m_hEndThread;
...
...
protected:
void ProcessMessage();
volatile bool m_StopThread;
CWinThread* m_Thread;
....
....
};
//CProgressBarExampleDlg.cpp
BOOL CProgressBarExampleDlg::OnInitDialog()
{
...
m_progress.SetRange(5, 100);
m_StopThread=false;
HANDLE m_hEndThread = CreateEvent(0, TRUE, FALSE, 0);
....
return TRUE;
}
void CProgressBarExampleDlg::ProcessMessage()
{
MSG msg;
if (::PeekMessage(&msg, NULL, 0, 0, PM_REMOVE))
{
::TranslateMessage(&msg);
::DispatchMessage(&msg);
}
}
UINT CProgressBarExampleDlg::WorkerThreadLauncher(LPVOID pvParam)
{
CProgressBarExampleDlg* pThreadInstance=
reinterpret_cast<CProgressBarExampleDlg*>(pvParam);
return pThreadInstance->Execute();
}
UINT CProgressBarExampleDlg::Execute()
{
int i, count;
count=0;
while (count< 180 && !m_StopThread)
{
for (i=0;i<30;i++)
{
m_progress.SetPos(i+10);
Sleep(10);
}
count++;
ProcessMessage();
}
return 0;
}
void CProgressBarExampleDlg::OnBnStart()
{
this->m_Thread=AfxBeginThread(WorkerThreadLauncher,this);
}
void CProgressBarExampleDlg::OnBnStop()
{
MSG msg;
DWORD dwResult = WaitForSingleObject( m_hEndThread, 0 );
if ( dwResult =! WAIT_OBJECT_0 )
{
this->m_StopThread = true;
}
}
I guess in the OnBnStart() function I maybe need a if-clause to start
the process again when it has been previously interrupted?
Does someone have a suggestion?
Thank you
Lucress