我的项目是一个 MFC 对话框。有一个“安装”按钮。用户可以点击该按钮开始下载,下载完成后自动执行安装。
我已经在 std::thread 中完成了下载部分。当用户点击“安装”按钮时,它会提示一个进度条,它实际上是另一个CDailog——它叫做CMyProgressBar。
CMyProgressBar has a member m_thDownload.
void CMyProgressBar::DoDataExchange(CDataExchange* pDX)
{
m_thDownload = std::thread(funDownload);
}
这里 m_thDownload 可以做下载的事情。下载后,我需要一个线程来执行安装。我不想再添加一个线程成员,按逻辑其实我也不必再添加一个线程。
那么,我应该把开始安装代码放在哪里呢?下载后可以立即执行吗?
最佳答案
创建一个运行这两个函数的函数,然后在一个线程中运行那个函数。
void funDownloadAndInstall() {
funDownload();
funInstall();
}
m_thDownload = std::thread(funDownloadAndInstall);
您还可以使用 lambda 表达式:
m_thDownload = std::thread([]() {
funDownload();
funInstall();
});
此外,我对 MFC 不是很熟悉,但是 DoDataExchange
似乎是启动线程的错误位置。如果它被调用不止一次,或者根本没有调用怎么办?
关于c++ - 如何使用一个 std::thread 对象来运行 2 个顺序事件(函数)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56659115/