Здравствуйте!
Используеться стандарт С++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
, то цикл все еще работает, но должна бы завершиться. Почему так не пойму. Подскажете? Как остановить/завершить цикл? Спасибо)
Используйте 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();
При втором вызове функции предыдущий вызов не завершается по причине того, что в нем бесконечный цикл.
Виртуальный выделенный сервер (VDS) становится отличным выбором
На страницах присутствуют компоненты из библиотеки UI в самой странице в секции заголовка прописана новая библиотека jQuery но при входе на страницу...
Добрый день уважаемыеПри создании новой страници в WP когда пишу заголовок страници инлайново добавляется к id=Subheader padding кто-то знает как его...
Проблема такая: есть сайт, который нормально отображается в мобильных браузерах, окромя Safari для iPhoneПрочитал на flexbug описание, решил править...