- 论坛徽章:
- 0
|
13可用积分
最近在做一个备份工具
由于之前没有使用多线程,所以导致备份过程,界面假死现象。
现在修改出现一个问题,如下,在按钮响应函数中通过AfxBeginThread()创建线程
void CDlg::OnButton3()
{
// TODO: Add your control notification handler code here
CWinThread* pThread;
pThread=AfxBeginThread(ThreadFunc,NULL);//&m_progress);
CPlayGif aa;
aa.DoModal(); //显示GIF图片
WaitForSingleObject(pThread, INFINITE);
//本打算在此处后添加备份结束的操作,但发现此语句不起作用,就是说压缩还未结束,就开始弹出消息框asd
//该如何解决这个问题?如果解决了,我想在此处发送消息,把上面显示gif图片的对话框关闭,该怎么整,先谢谢了
AfxMessageBox("asd");
}
UINT ThreadFunc(LPVOID lpParam)
{
CPack m_pack;
m_pack.cpack();
return 0;
}
void CPack::cpack()
{
……
CreateProcess(NULL, ss, NULL, NULL, false, 0, NULL, NULL, &si, &pi);//在此调用外部程序7-zip压缩
……
}
很抱歉,我只有13个积分,希望不嫌弃
[ 本帖最后由 hikaruxx 于 2009-6-10 17:59 编辑 ] |
最佳答案
查看完整内容
WaitForSingleObject的参数列表不是:WaitForSingleObject(HANDLE, DWORD); 吗?MFC中有这样的重载?WaitForSingleObject(CWinThread*, DWORD); ?如果没有这样的重载(但是上面的代码又是怎么编译通过的呢……), 可以考虑用:WaitForSingleObject(pThread->m_hThread, ... );
|