Страницы

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

суббота, 13 июля 2019 г.

C++ асинхронный бесконечный цикл

Здравствуйте. У меня есть бесконечный цикл. При запуске, как и ожидалось, программка виснет, ничего не нажимается. Как можно запустить этот цикл асинхронно? В C++ не очень силен, мне нужен простенький пример. Спасибо)
for (size_t i = 0; i < INFINITY; i++) { somefunction(); }


Ответ

Используя std::thread, сделал бесконечный цикл внутри отдельного потока, которому можно передать в указатель значение false и тогда цикл в потоку остановиться.
bool *ptrStatus = &status; *ptrStatus = 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)); } }

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

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