Форум программистов, компьютерный форум CyberForum.ru
Наши страницы

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
pianist
0 / 0 / 0
Регистрация: 12.06.2012
Сообщений: 56
#1

Одновременное выполнение действий без использования потоков/процессов - C++

24.10.2012, 17:59. Просмотров 1620. Ответов 8
Метки нет (Все метки)

Нужно ожидать ввода команды со стандартного потока и в то же время в начале каждого часа вызывать некую функцию ( func назовем).
Возможно-ли реализовать без потоков и fork'ов ( хочу один процесс, один поток ). Если да, то, собственно, как?
Спасибопожалуйста.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
24.10.2012, 17:59
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Одновременное выполнение действий без использования потоков/процессов (C++):

Ввод через файл без использования потоков - C++
Добрый день Меня интересует вопрос как сделать ввод через файл без использования потоков. Это вот так или нет? int main() { ...

Создание и завершение процессов и потоков. Приоритеты выполнения потоков - C++
Здравствуйте. Буду очень раз если поможете понять,что конкретно нужно сделать в вот этом задании,пока особого представления о...

Выполнение действий с возможностью действия - C++
Извиняюсь за теоретический вопрос, но все же попробую обратиться к вашим экстрасенсорным способностям. Есть последовательность...

Выполнение действий с двоичными векторами - C++
Начало есть; нужно выполнить сложение векторов и сдвиг //Создайте класс bVect для выполнения действий с двоичными векторами. //Длина...

Понятие синхронизации потоков и процессов. Семафоры и мьютексы - C++
Хотелось бы обсудить и уточнить некоторые понятия: 1. Корректно ли следующее утверждение. Синхронизация - это обеспечение...

Выполнение действий через некоторое время - C++
хочу сделать так чтобы на экран выводились всякие символы через некторое время. ну например: сначала на экран выводится П черех несколько...

8
Kastaneda
Форумчанин
Эксперт С++
4655 / 2863 / 228
Регистрация: 12.12.2009
Сообщений: 7,274
Записей в блоге: 2
Завершенные тесты: 1
24.10.2012, 18:07 #2
Если под Linux, то вот
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
// взято здесь [url]http://www.cplusplus.com/forum/unices/25213/[/url]
#include <time.h>
#include <sys/time.h>
#include <signal.h>
#include <stdio.h>
#include <stdlib.h>
/*
**   NOTE NOTE NOTE NOTE
**
**  you will need to link: (use LDFLAGS)
**
**  -lrt -lpthread
*/
 
#define SZ 46
long int overruns[SZ];
 
void callback(union sigval  arg) {
 
    timer_t * p =  (timer_t *) arg.sival_ptr;;
    int delay = timer_getoverrun(*p);
    printf("delay = %d\n", delay);
 
    // count overruns, which are timer intervals skipped
    if (delay<SZ) {
    overruns[delay]++;
    } else {
    timer_delete(*p);
    return ;
    }
 
    return;
}
 
timer_t timerid;
int main (int argc, char ** argv) {
 
    struct sigevent se;
    struct itimerspec ts;
    long int nsec;
    long int msec;
    long int sec;
 
    if(argc<2) {
    fputs("time milliseconds?\n",stderr);
    exit(1);
    }
    msec = atoi(argv[1]);
    fprintf(stderr, "got  %ld\n", msec);
    sec = (msec / 1000); 
    msec %= 1000;
    nsec = msec * 1e06;;
 
    se.sigev_notify = SIGEV_THREAD;
    se.sigev_value.sival_ptr = &timerid;
    se.sigev_notify_function = callback;
    se.sigev_notify_attributes = NULL;
 
    if ( -1 == timer_create(CLOCK_REALTIME, &se, &timerid)) {
    perror("timer_create:");
    return(1);
    }
 
    ts.it_value.tv_sec = sec;
    ts.it_value.tv_nsec = nsec;
    ts.it_interval.tv_sec = sec;
    ts.it_interval.tv_nsec = nsec ;
    printf("nanosex = %ld\n", ts.it_interval.tv_nsec);
    printf("seconds = %ld\n", ts.it_interval.tv_sec);
 
    if (-1 == timer_settime(timerid, 0, &ts, NULL)) {
    perror("timer_settime:");
    }
    getchar();   // press a key to stop
 
    int t;
    for(t=0; t<SZ; t++) {
 
    printf("overruns[%02d] = %ld\n", t, overruns[t]);
    }
 
 
    return 0;
}
Либо если есть возможность использовать Qt, то singleShot как раз подойдет.
1
pianist
0 / 0 / 0
Регистрация: 12.06.2012
Сообщений: 56
24.10.2012, 18:10  [ТС] #3
А если под виндовс?
0
Kastaneda
Форумчанин
Эксперт С++
4655 / 2863 / 228
Регистрация: 12.12.2009
Сообщений: 7,274
Записей в блоге: 2
Завершенные тесты: 1
24.10.2012, 18:16 #4
Ну если на Qt нельзя, то можно на WinAPI читать буфер консоли и раз в час вызывать нужную функцию. На WinAPI чтение буфера не блокирует выполнение программы - заглянули в буфер, если пусто, можно дальше что-то делать.
0
pianist
0 / 0 / 0
Регистрация: 12.06.2012
Сообщений: 56
24.10.2012, 18:23  [ТС] #5
Просто хотелось бы систему минимально грузить
0
Kastaneda
Форумчанин
Эксперт С++
4655 / 2863 / 228
Регистрация: 12.12.2009
Сообщений: 7,274
Записей в блоге: 2
Завершенные тесты: 1
24.10.2012, 18:23 #6
вот здесь есть пример проверки нажатия клавиши на WinAPI.
0
pianist
0 / 0 / 0
Регистрация: 12.06.2012
Сообщений: 56
25.10.2012, 16:50  [ТС] #7
а если boost'ом? Знает кто?
0
I.M.
564 / 547 / 5
Регистрация: 16.12.2011
Сообщений: 1,389
25.10.2012, 17:31 #8
pianist, а чем потоки не угодили? пусть один поток каждый час что-то там запускает, а второй ждет ввода
0
Deviaphan
25.10.2012, 17:36     Одновременное выполнение действий без использования потоков/процессов
  #9

Не по теме:

Вот так сделать хорошо http://button.dekel.ru/

0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
25.10.2012, 17:36
Привет! Вот еще темы с ответами:

Выполнение действий через заданный промежуток времени - C++
Нужен самый простой пример програмки на си++ (работаю в вижуал студио), которая будет каждый равный промежуток времени выполнять какоето...

Реализовать выполнение заданных действий над одномерным массивом. - C++
&quot;Реализовать выполнение заданных действий над одномерным массивом. Число элементов массива задаётся пользователем. Элементы могут...

Чтение двумерного массива и выполнение над ним действий - C++
Здравствуйте форумчане, вот столкнулся с проблемкой....есть текстовый документ в нем написан двумерный массив(с чтением массива из файла...

Выполнение действий над элементами двумерных массивов целых чисел - C++
Написать программу, выполняющую действия над элементами двумерных массивов целых чисел. Действия оформить как отдельные функции. Все...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
25.10.2012, 17:36
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru