LINUX.ORG.RU

реализация таймеров


0

0

Посоветуйте как в программе на С реализовать таймеры.
Таймер не должен быть супер точным +-2 секунды не критично.
Проблема в том что таймеров может быть много,
и их процессе работы программы нужно запускать или останавливать.
Я пробовал делать через текущее время: разница между сохраненным
заначением в ф-цией time(NULL).
Но возможно изменение текущего времени после чего моя реализация
сходит с ума.
Как интересно данная задача реализованна в библиотеках Gtk или Qt.


А чё в man setitimer понаписано?

bugmaker ★★★★☆
()

если под qt то
#include <qtimer.h>

void myf::init()
{
connect(&timer, SIGNAL(timeout()), this, SLOT(timeSlot()));
timer.start(100);

}

void myf::timeSlot()//таймер
{

}


или по другому
main.cpp
//================================
#include <stdio.h>
#include <unistd.h>


#include "clock.h"

bool stop_program=false;

int main(int argc, char *argv[], char *envp[])
{
start_clock(30000);



while (stop_program==false)
{
pause();
}

printf("end programm\n");
return 0;
}




clock.h
//==================================

#include <signal.h> /* SIGALRM */
#include <sys/time.h> /* struct tms */

int usekt;

struct sigaction action;
struct itimerval val;

void m_timer(int sig_no)//=======================
{

}

bool start_clock(int usek)
{
//usekt=usek;
a_ftimer_shag(usek);
sigemptyset(&action.sa_mask);

action.sa_handler =(void (*)(int))m_timer;
action.sa_flags=SA_RESTART;
if (sigaction(SIGALRM,&action,0)==-1)
{
perror("sig");
return 1;
}

val.it_interval.tv_sec=0;
val.it_interval.tv_usec=usek;
val.it_value.tv_sec=0;
val.it_value.tv_usec=usek;
//printf("fffffff\n");
if (setitimer(ITIMER_REAL, &val, 0)==-1)
perror("alarm");
}








rh9
()
Ответ на: комментарий от rh9

спасибо. действительно все просто.

CL
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.