呃,安全退出是在线程里调用AfxEndThread或者在外部通知线程来调用
至于你的问题嘛,很明显是代码有bug,就算你写了AfxEndThread估计也是执行不到就退出的。
话说回来你这三行的结果就是AfxBeginThread的默认行为,你哪里抄来的多此一举的代码?
至于你的问题嘛,很明显是代码有bug,就算你写了AfxEndThread估计也是执行不到就退出的。
话说回来你这三行的结果就是AfxBeginThread的默认行为,你哪里抄来的多此一举的代码?
解决方案 »
- Toolbar失去焦点时上面的按钮会自动变灰(变成Disabled状态),怎么办?
- XP下实现位图标题栏,位图比XP的矮,XP标题栏会遗留点
- 怎样在对话框里点击画圆并且只能在棋盘的两直线交点画?????
- 如何防止头文件多次被使用?
- ★★#import "msxml.dll",我想用msxml.dll但是到程序里编译完就变成调用msxml4.dll了~~★★
- 求inside com源代码
- 两个简单的小问题!
- 刚买的Visual Studio.net,不会安装,咋办呢,帮帮忙
- 有关软件的合法有效性的问题
- 那为大侠救命,关于键盘快捷键的问题.我给100分
- 再问类的静态成员和耦合性的关系
- 执行时,该内存不能为"read",求大虾指点!
pCurverThread = AfxBeginThread(RUNTIME_CLASS(CUICurveThread));
界面线程CUICurveThread中OnInitDialog中创建工作者线程
m_InsertThread_handle = ::CreateThread(NULL, 0, InsertDataThreadProc, this, NULL, &dwordID);
::CloseHandle(m_InsertThread_handle);DWORD CDlg_XXX::InsertDataThreadProc(LPVOID lpParameter)
{
CDlg_XXX * pThis = (CDlg_XXX *)lpParameter;
while ((!pThis->m_bQuit)) //OnDestroy中改变m_bQuit条件状态,变量控制线程安全退出,WaitForSingleObject等待这个线程退出后再继续后面
{
........
Sleep(500);
}
return 0;
}
m_InsertThread_handle为类的成员变量,用于界面线程CUICurveThread中窗口退出
void CDlg_XXX::OnDestroy()
{
CDlg_Common::OnDestroy();
m_bQuit = TRUE;
DWORD dwRet = WaitForSingleObject(m_InsertThread_handle, INFINITE);
if (dwRet == WAIT_OBJECT_0)
{
LOG("insertdata thread quit success");
}
}主窗口关闭时,界面线程中的窗口会收到OnDestroy消息,然后将条件状态改变让工作者线程退出,直到工作者线程安全退出。
在CXXXApp的InitInstance函数中这里创建线程 CMFCDlg dlg;
m_pMainWnd = &dlg;
INT_PTR nResponse = dlg.DoModal();窗口已经关闭了,这里 g_running = false;
WaitForSingleObject(m_InsertThread_handle, INFINITE);
m_InsertThread_handle在启动的时候都已经被你关了,怎么还在关闭的时候等?
不会写线程的话,直接用PPL就好了嘛