Страницы

Поиск по вопросам

понедельник, 26 ноября 2018 г.

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

Здравствуйте!
Используеться стандарт С++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;

Комментариев нет:

Отправить комментарий