Таймер прерывания в С

Я должен написать AC-файл, который о прерывании таймера. Программа будет работать на DosBox. Особенности программы просты:

Программа вызывает функцию (которая набирается мной) для каждого прерывания таймера. И эти прерывания будут запрограммированы с помощью функций setvect и getvect.

Например, было бы очень хорошо, если бы у меня был AC-код, который выводит "Hello world\n" на экран один раз в секунду без какой-либо функции сна или задержки. Я имею в виду, что код, который печатает "hello world", должен быть в функции и для каждая программа прерываний должна вызывать эту функцию.

Очень сложно найти пример этого случая. Можете ли вы переслать пример ссылки? Спасибо за помощь

2 ответа

      #include<signal.h>
#include<sys/time.h>
#include <unistd.h>
#include <assert.h>
#include <stdio.h>

#define PERIOD 999999
static sigset_t block ;
void timer_handler ();

static void init( ) __attribute__((constructor));
void init(){
    sigemptyset(&block);
    sigaddset(&block,SIGVTALRM);

struct sigaction act={0};
struct timeval interval;
struct itimerval period;

act.sa_handler=timer_handler;
assert(sigaction(SIGVTALRM,&act,NULL)==0);

interval.tv_sec=0;
interval.tv_usec=PERIOD;
period.it_interval=interval;
period.it_value=interval;
setitimer(ITIMER_VIRTUAL,&period,NULL);

    
}

void timer_handler(int sig){
write(1,"Hi\n",3); 


}
int main(){
  while(1);
  return 0;
}

Просто совет.

В общем, хорошо не использовать такую ​​функцию, как печать, в прерывании. В вашем случае, поскольку ваш код прост, на самом деле это не проблема, но у вас могут возникнуть проблемы с приоритетом в более сложных программах, если вы проводите много времени в перерывах...

Другие вопросы по тегам