void CProgressDlg::OnClose()
{
m_bEnd = true; DWORD ret = WaitForSingleObject(m_handle, INFINITE);
if(ret == WAIT_OBJECT_0)
{
CloseHandle(m_handle);
CDialog::OnCancel(); }}//等待这个这个函数结束,子线程的入口函数,它的句柄是m_handle,创建略。
void CProgressDlg::ProgressRun()
{
for(int i = 0; i<1000; i++)
{
if(m_bEnd)
{
return;
}
Sleep(10);
m_saveProgress.SetPos(i);
if(i ==999)
{
i = 0;
}
}
}
我用这种方式出了点问题。 但是那个线程结束的时候,线程对象确实变成有信号状态了嘛。
来等待线程的结束。 是否可以?
线程结束后的WaitForSingleObject的返回值貌似不是WAIT_OBJECT_0,具体可看看MSDN
0x00000000L The state of the specified object is signaled. MSDN上的
下面是windows核心变成的一段话,好像没看出来这么说。实际上,线程内核对象也遵循同样的
规则。即线程内核对象总是在未通知状态中创建。当线程终止运行时,操作系统会自动将线程
对象的状态改为已通知状态。因此,可以将相同的方法用于应用程序,以确定线程是否不再运
行。与进程内核对象一样,线程内核对象也可以处于已通知状态或未通知状态。
剩下的是可行的