Цикл внутри потока. С++

252
18 июня 2017, 17:27

Здравствуйте!

Используеться стандарт С++11, и библиотека <thread>.

Есть поток который запускаеться в "фоновом" режиме thread.detach(). внутри етого потока есть функция setWallpaper(bool status) с бесконечным циклом:

setWallpaper(bool status) {
   if(!status) {
       MessageBox(NULL, status, L"STOP", MB_OK);
   }
   while (status) {
       PVOID path = getPath(rand() % 8 + 1);
       SystemParametersInfo(SPI_SETDESKWALLPAPER, 0, path, SPIF_UPDATEINIFILE);
       Sleep(min * 1000);
    }
}

Если обратиться к етой функции и передать значение переменной false, то цикл все еще работает, но должна бы завершиться. Почему так не пойму. Подскажете? Как остановить/завершить цикл? Спасибо)

Answer 1

Используйте std::future для ожидания и сигнализации о завершении:

void setWallpaper(std::future<void> stop) {
   auto period = std::chrono::seconds(min);
   do {
       PVOID path = getPath(rand() % 8 + 1);
       SystemParametersInfo(SPI_SETDESKWALLPAPER, 0, path, SPIF_UPDATEINIFILE);
   } while (stop.wait_for(period) != std::future_status::ready);
}

Запуск:

std::promise<void> stop;
std::thread(setWallpaper, stop.get_future()).detach();
// Остановка:
stop.set_value();
Answer 2

При втором вызове функции предыдущий вызов не завершается по причине того, что в нем бесконечный цикл.

READ ALSO
Анонимная функция

Анонимная функция

Есть кусок кода из учебника:

339
В папку assets попадает старая версия jquery-ui

В папку assets попадает старая версия jquery-ui

На страницах присутствуют компоненты из библиотеки UI в самой странице в секции заголовка прописана новая библиотека jQuery но при входе на страницу...

287
Как убрать padding с #Subheader / WordPress

Как убрать padding с #Subheader / WordPress

Добрый день уважаемыеПри создании новой страници в WP когда пишу заголовок страници инлайново добавляется к id=Subheader padding кто-то знает как его...

412
Как адаптировать вёрстку под Сафари?

Как адаптировать вёрстку под Сафари?

Проблема такая: есть сайт, который нормально отображается в мобильных браузерах, окромя Safari для iPhoneПрочитал на flexbug описание, решил править...

453