Здравствуйте. У меня есть бесконечный цикл. При запуске, как и ожидалось, программка виснет, ничего не нажимается. Как можно запустить этот цикл асинхронно?
В 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));
}
}
Комментариев нет:
Отправить комментарий