如何使用一个std :: thread对象运行2个连续事件(函数)?

时间:2019-06-19 02:01:49

标签: c++ multithreading c++11 mfc

我的项目是MFC对话框。有一个“安装”按钮。用户可以单击此按钮开始下载,并在下载完成后自动执行安装。

enter image description here

我已经在std :: thread中完成了下载部分。当用户单击“安装”按钮时,它会提示一个进度条,它实际上是另一个CDailog-名为CMyProgressBar。

CMyProgressBar has a member m_thDownload.

void CMyProgressBar::DoDataExchange(CDataExchange* pDX)
{
    m_thDownload = std::thread(funDownload);
}

这里m_thDownload可以执行下载操作。下载之后,我需要一个线程来执行安装。我不想添加另一个线程成员,实际上我不必根据逻辑添加另一个线程。

那么,我应该把起始安装代码放在哪里?下载后可以立即执行吗?

1 个答案:

答案 0 :(得分:3)

创建一个同时运行这两个功能的功能,然后在线程中运行该功能。

void funDownloadAndInstall() {
    funDownload();
    funInstall();
}

m_thDownload = std::thread(funDownloadAndInstall);

您还可以使用lambda表达式:

m_thDownload = std::thread([]() {
    funDownload();
    funInstall();
});

另外,我对MFC不太熟悉,但是DoDataExchange似乎是启动线程的错误位置。如果它被多次调用或根本不调用怎么办?