程序意图是:当点吉 "挂起"按钮时,会产生一线程,该线程的处理函数如下:DWORD WINAPI ThreadFun(PVOID pvParam)
{
HANDLE hThreadPrimary=(HANDLE) pvParam;
::SuspendThread(hThreadPrimary);
AfxMessageBox("主线程已被挂起");----------问题处
::ResumeThread(hThreadPrimary);
CloseHandle(hThreadPrimary);
return(0);
}
运行时,程序没有反应,但是当将上述的线程函数中的AfxMessageBox("主线程已被挂起");这一行去掉,这执行正确。我测试了,hThreadPrimary的值确实是主线程的值,而且suspendthread函数也成功执行
但是在执行AfxMessageBox处就死了。
{
HANDLE hThreadPrimary=(HANDLE) pvParam;
::SuspendThread(hThreadPrimary);
AfxMessageBox("主线程已被挂起");----------问题处
::ResumeThread(hThreadPrimary);
CloseHandle(hThreadPrimary);
return(0);
}
运行时,程序没有反应,但是当将上述的线程函数中的AfxMessageBox("主线程已被挂起");这一行去掉,这执行正确。我测试了,hThreadPrimary的值确实是主线程的值,而且suspendthread函数也成功执行
但是在执行AfxMessageBox处就死了。
void CSchedLabDlg::OnSuspend()
{
//EnableWindow(0); m_listBox.EnableWindow(0); HANDLE hThreadPrimary;
DuplicateHandle(GetCurrentProcess(),GetCurrentThread(),GetCurrentProcess(),&hThreadPrimary,THREAD_SUSPEND_RESUME,FALSE,DUPLICATE_SAME_ACCESS);
DWORD dwThreadID;
CloseHandle(::CreateThread(NULL,0,ThreadFun,hThreadPrimary,0,&dwThreadID));
}
就行了。