Здравствуйте!
Используеться стандарт С++11, и библиотека
Есть поток который запускаеться в "фоновом" режиме 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, то цикл все еще работает, но должна бы завершиться. Почему так не пойму. Подскажете? Как остановить/завершить цикл? Спасибо)
Ответ
Я сделал по своему, вроде работает, мне достаточно :)
status и interval в глобальном скоупе.
Да, знаю что не правильно, но мне сойдёт)
bool status = true;
int interval = 1;
void startNewThread(int interval) {
thread newThread(setWallpaper, &status, interval);
newThread.detach();
};
int setWallpaper(bool *status, int interval) {
while (true) {
if (*status == false) return 0;
wstring path = getPath();
SystemParametersInfo(SPI_SETDESKWALLPAPER, 0, (PVOID)path.c_str(), SPIF_UPDATEINIFILE);
this_thread::sleep_for(chrono::seconds(interval));
}
}
При нажатии на кнопку "stop":
bool *ptrStatus = &status;
*ptrStatus = false;
Комментариев нет:
Отправить комментарий