Даже если это настолько полезно и просто, что не переносимо, Windows и Linux используют разные библиотеки потоков, поэтому вам нужно написать что-то вроде этого:
#if defined WIN32
// Timer for Windows: it uses SetTimer
#endif
#if defined __LINUX__
// Timer for Linux: it uses settimer
#endif
Код не такой короткий, чтобы писать здесь, так что смотрите здесь для таймера Windows.В Windows вместо SetTimer()
можно использовать более простой PostMessageDelayed()
.Это будет использовать еще меньше ресурсов.Для Linux вы можете написать что-то вроде этого:
void test_timer()
{
signal(SIGALRM, alarm_handler);
alarm(60); // 1 minute, granularity is 1 second
}
void alarm_handler(int signo)
{
if (signo == SIGALRM)
{
// Time elapsed
}
}
Добавление Если вам нужно написать переносную библиотеку, возможно, идея использовать SetTimer () для версии Windows довольно уродлива.Для Windows вы можете рассмотреть для создания фонового потока, а затем перевести его в спящий режим на необходимое время (так что вы будете делать все без сообщений Windows).