Здравствуйте!
Используеться стандарт С++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();
При втором вызове функции предыдущий вызов не завершается по причине того, что в нем бесконечный цикл.
Апостиль в Лос-Анджелесе без лишних нервов и бумажной волокиты
Основные этапы разработки сайта для стоматологической клиники
Продвижение своими сайтами как стратегия роста и независимости