У меня есть базовая функция таймера, но она будет работать только тогда, когда период сна довольно мал. Если DELAY меньше 500 мс, функция будет работать нормально. Я пробовал другие методы сна, в том числе sleep (), usleep (), nanosleep () и gettimeofday (), и все они перестают работать, когда DELAY (с поправкой на каждую функцию) слишком велик (обычно перестает работать между 0,3 и 0,5 секунды). Когда это не работает, спящая функция не будет ничего возвращать, она просто никогда не завершит выполнение.
Например:
void executeTimer(MyObject *obj) {
printf("Starting timer, delay = %d\n", DELAY);
std::this_thread::sleep_for(std::chrono::milliseconds(DELAY));
printf("Complete\n");
obj->doSomething();
}
Позвонил позже в программе через:
timer = std::thread(executeTimer, this);
никогда не будет выводить «Complete», если DELAY больше 400-500.
Кто-нибудь знает, почему это не будет работать? Спасибо за помощь!
Задача ещё не решена.
Других решений пока нет …