Как я могу использовать один объект std :: thread для запуска 2 последовательных событий (функций)? - PullRequest
0 голосов
/ 19 июня 2019

Мой проект - это диалог 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 Ответ

3 голосов
/ 19 июня 2019

Создайте одну функцию, которая запускает обе эти функции, затем запустите эту функцию в потоке.

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

m_thDownload = std::thread(funDownloadAndInstall);

Вы также можете использовать лямбда-выражение:

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

Кроме того, я не очень знаком с MFC, но DoDataExchange кажется неподходящим местом для запуска потоков. Что, если его вызывают более одного раза или нет вообще?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...