прошу подсказать реализацию нижеописанной задачи (используя C++ в среде Linux).
есть два процесса, один из которых (процесс А) должен запускаться раз в 30 мС, второй (процесс В)должен запускаться раз в 2-3 секунды. процесс А имеет более высокий приоритет по выполнению, чем процесс В (иными словами процесс В может быть прерван процессом А в любое время с последующим возвратом к процессу В). попытки реализации из через организацию таймера (используя stuct sa и timer) не привели к успеху, т.к. хотя процесс В выполняется по времени (запускается), но процесс А все время глючит (в частности при включенном процессе А, в процессе В не работает функция getch (), она всегда завершается с кодом ошибки -1, не ожидая нажатия клавиши клавиатуры)ниже приведу listing программы
#include "variable.h"
using namespace std;
int main(int argc, char** argv)
{
int test;
Set_Timer ();
initscr ();
while (1) // main programm circle
{
cbreak ();
test = getch ();
printf ("%u\n", test);
}
endwin ();
printf("\nmain exit\n");
return 0;
}
// timer function
void timer_intr(int sig, siginfo_t *extra, void *cruft)
{
// smth system
struct timespec tmsp;
clock_gettime(CLOCK_REALTIME, &tmsp);
}
int Set_Timer (void)
{
// timer set
sigemptyset(&sa.sa_mask);
sa.sa_flags = SA_SIGINFO; // real time signal
sa.sa_sigaction = timer_intr; // pointer to action
if(sigaction(SIGRTMIN, &sa, NULL) < 0)
{
perror("sigaction error");
return 1;
}
if (clock_getres(OUR_CLOCK, &resolution) < 0)
{
perror("clock_getres error");
return 1;
}
timer_event.sigev_notify = SIGEV_SIGNAL;
timer_event.sigev_signo = SIGRTMIN;
timer_event.sigev_value.sival_ptr = (void *)&mytimer;
if (timer_create(OUR_CLOCK, &timer_event, &mytimer) < 0)
{
perror("timer create error");
return 1;
}
clock_gettime(CLOCK_REALTIME, &tmsp);
i.it_value.tv_sec = tmsp.tv_sec + 2;
i.it_value.tv_nsec = 0;
i.it_interval.tv_sec = 0;
i.it_interval.tv_nsec = 30000000; // 30 ms (timer interval)
i.it_value = i.it_interval;
if(timer_settime(mytimer, TIMER_ABSTIME , &i, NULL) < 0)
{
perror("settimer");
return 3;
}
return 0;
}
#ifndef VARIABLE_H_
#define VARIABLE_H_
#include <unistd.h>
#include <signal.h>
#include <sched.h>
#include <sys/time.h>
#include <time.h>
#include <curses.h>
#include <stdio.h>
#include <iostream>
#include <sys/io.h>
#define OUR_CLOCK CLOCK_REALTIME
#endif