Таймер прерывания в С
Я должен написать 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;
}
Просто совет.
В общем, хорошо не использовать такую функцию, как печать, в прерывании. В вашем случае, поскольку ваш код прост, на самом деле это не проблема, но у вас могут возникнуть проблемы с приоритетом в более сложных программах, если вы проводите много времени в перерывах...