我的项目是MFC对话框。有一个“安装”按钮。用户可以单击此按钮开始下载,并在下载完成后自动执行安装。
我已经在std :: thread中完成了下载部分。当用户单击“安装”按钮时,它会提示一个进度条,它实际上是另一个CDailog-名为CMyProgressBar。
CMyProgressBar has a member m_thDownload.
void CMyProgressBar::DoDataExchange(CDataExchange* pDX)
{
m_thDownload = std::thread(funDownload);
}
这里m_thDownload可以执行下载操作。下载之后,我需要一个线程来执行安装。我不想添加另一个线程成员,实际上我不必根据逻辑添加另一个线程。
那么,我应该把起始安装代码放在哪里?下载后可以立即执行吗?
答案 0 :(得分:3)
创建一个同时运行这两个功能的功能,然后在线程中运行该功能。
void funDownloadAndInstall() {
funDownload();
funInstall();
}
m_thDownload = std::thread(funDownloadAndInstall);
您还可以使用lambda表达式:
m_thDownload = std::thread([]() {
funDownload();
funInstall();
});
另外,我对MFC不太熟悉,但是DoDataExchange
似乎是启动线程的错误位置。如果它被多次调用或根本不调用怎么办?