一个关于终止线程的问题,请帮帮忙

zxq2003tt 2005-05-12 11:27:04
我用多线程实现了后台计算和界面的进度条显示

我想让进度条上的取消按钮终止计算线程,该如何实现????

这个是我在View类下的线程函数:

UINT CFVTVSimulatorView::ThreadMakeSparseEpi(LPVOID lpParam)
{
return ((CFVTVSimulatorView*)lpParam)->GlobalMakeEPI();
}
...全文
84 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
zxq2003tt 2005-05-12
  • 打赏
  • 举报
回复
我上面的方法不知道错在哪里,郁闷……

楼上说的event对象不会用啊

能说具体一点么
gzl 2005-05-12
  • 打赏
  • 举报
回复
使用event对象实现同步比较好。但你在等待这个线程中最好改造(自写一个函数,简单封一下WaitForSingleObject函数,或是其它的你用的WaitForXXXXXX函数),不要让它阻塞了窗口消息。
zxq2003tt 2005-05-12
  • 打赏
  • 举报
回复


取消按钮的消息处理函数在进度对话框类中,怎么让他能够终止view类里面 的线程???

我的方法是在OnCancel消息处理函数添加发消息给CFVTVSimulatorView的代码
void CProgressDlg::OnCancel()
{
CWnd* pwnd;
pwnd=GetParent();//进度对话框的创建是在CFVTVSimulatorView类
//用Create(IDD_PROGRESS, this)创建的;所以这里我这样做,不知对不对
::PostMessage(pwnd->m_hWnd,WM_CANCEL,0,0);

CDialog::OnCancel();
}
在CFVTVSimulatorView类里面添加下面 的函数,来接收CProgressDlg类发来的终止命令消息:

LRESULT CFVTVSimulatorView::OnCancelProcess(WPARAM wParam,LPARAM lParam)
{
if(m_pThread)
{
DWORD lpexitcode=0;
TerminateThread(m_pThread,lpexitcode);
m_pThread=NULL;
}
return 0;
}
CodeProject-Jerry 2005-05-12
  • 打赏
  • 举报
回复
WINBASEAPI BOOL WINAPI TerminateThread ( HANDLE hThread, DWORD dwExitCode )

dongfa 2005-05-12
  • 打赏
  • 举报
回复
可以增加一个BOOL标志,假如:BOOL m_bStop = FALSE;
当点取消时设置m_bStop = TRUE;
在GlobalMakeEPI中判断m_bStop 是否为TRUE, 如果为TRUE就退出.
如果GlobalMakeEPI没办法循环检测m_bStop 就不行了.
只能强制终止线程了:TerminateThread
zxq2003tt 2005-05-12
  • 打赏
  • 举报
回复
up

15,471

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 进程/线程/DLL
社区管理员
  • 进程/线程/DLL社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧