The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]

форумы  помощь  поиск  регистрация  майллист  вход/выход  слежка  RSS
"создание двух процессов и запуск их по времени (используя С+..."
Вариант для распечатки  
Пред. тема | След. тема 
Форумы Программирование под UNIX (Public)
Изначальное сообщение [ Отслеживать ]

"создание двух процессов и запуск их по времени (используя С+..."  +/
Сообщение от Zulmishan (ok) on 25-Сен-09, 11:16 
прошу подсказать реализацию нижеописанной задачи (используя 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

Высказать мнение | Ответить | Правка | Cообщить модератору

Оглавление

Сообщения по теме [Сортировка по времени | RSS]


1. "создание двух процессов и запуск их по времени (используя С+..."  +/
Сообщение от Андрей (??) on 25-Сен-09, 19:20 
это вам в институте задали?

> есть два процесса, один из которых (процесс А) должен запускаться раз в 30 мС, второй
> (процесс В)должен запускаться раз в 2-3 секунды.

кто должен запускать процессы A и B ?

> процесс А имеет более высокий приоритет по выполнению, чем процесс В (иными словами
> процесс В может быть прерван процессом А в любое время с последующим возвратом к
> процессу В).

кто управляет прерываниями и исполнением процессов A и B ?

Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

2. "создание двух процессов и запуск их по времени (используя С+..."  +/
Сообщение от Zulmishan (ok) on 27-Сен-09, 15:59 
нет, это по работе. процессы должен запускать я сам, поэтому я программировал таймер на запуск раз в 30 мС. прерывания я старался не использовать, только программый таймер.
Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

3. "создание двух процессов и запуск их по времени (используя С+..."  +/
Сообщение от Alex__S on 28-Сен-09, 05:25 
>нет, это по работе. процессы должен запускать я сам, поэтому я программировал
>таймер на запуск раз в 30 мС. прерывания я старался не
>использовать, только программый таймер.

учебник почитайте. про процессы, кто их запускает  и прерывает.
а то задача непонятна


Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

Архив | Удалить

Индекс форумов | Темы | Пред. тема | След. тема




Партнёры:
PostgresPro
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2024 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру