The OpenNET Project / Index page

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

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

"CreateWaitableTimer "  
Сообщение от from_mars on 20-Янв-09, 05:41 
В венде есть ф-я CreateWaitableTimer, которая создает таймер, который затем можно использовать в каком-нить потоке, в одной из WaitFor-функций. Т.е. поток ожидает события от таймера, просыпается по событию, делает свои дела, снова засыпает в ожидании события от таймера. Не важно, успел ли поток сделать свои дела до следующей сработки таймера, таймер стабильно будет сигналить в заданном интервале, это я к тому, что обычный sleep() не подойдет :)

Вопрос в том, как такое организовать в *никсах, в многопоточной проге? )

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

 Оглавление

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


1. "CreateWaitableTimer "  
Сообщение от mikra on 20-Янв-09, 11:14 
>В венде есть ф-я CreateWaitableTimer, которая создает таймер, который затем можно использовать
>в каком-нить потоке, в одной из WaitFor-функций. Т.е. поток ожидает события
>от таймера, просыпается по событию, делает свои дела, снова засыпает в
>ожидании события от таймера. Не важно, успел ли поток сделать свои
>дела до следующей сработки таймера, таймер стабильно будет сигналить в заданном
>интервале, это я к тому, что обычный sleep() не подойдет :)
>
>
>Вопрос в том, как такое организовать в *никсах, в многопоточной проге? )
>

А вопрос конкретно в чем?
"Вопрос в том, как ТАКОЕ организовать в *никсах, в многопоточной проге?"
или
"Вопрос в том, как такое ОРГАНИЗОВАТЬ в *никсах, в многопоточной проге?"

Тоесть шашечки или ехать? :)

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

2. "CreateWaitableTimer "  
Сообщение от from_mars on 21-Янв-09, 02:09 
Да вроде бы разобрался :) Нужно было следущее:
Есть многопоточная прога, нужно, чтобы один из потоков, через определенный переиод времени, получал сигнал (ну обязательно *никс сигнал, а просто сигнал, о событии), от которого этот поток просыпался, делал свое дело и дальше спать.
sleep() в цикле не подходит, потому что надо чтобы событие генерилось через строго опр. промежуток времени.

В венде это можно сделать так:

//не важно в каком потоке
...
hTimer = CreateWaitableTimer();
SetWaitableTimer(hTimer, 10 секунд);
...

//в одном из потоков

while(1) {
  WaitForSingleObject(hTimer);
  do_some_code(); // мы не знаем сколько времени займет выполнение кода
  // если код будет выполнятся дольше 10 сек, то след. вызов WaitForSingleObject(hTimer)
  // сразу же вернет управление, т.к. событие уже сгенерилось и ждет когда его заметят :)
  // поэтому поток не уйдет в спячку, а опять перейдет к do_some_code(). Вот почему
  // sleep() не подходит.
}

В *никсах это можно организовать с помощью timer_create() и sigsuspend(). Или может как-то с помощью SDL. А может еще как-то :)


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

3. "CreateWaitableTimer "  
Сообщение от Michelnok (??) on 21-Янв-09, 03:10 
>
>sleep() в цикле не подходит, потому что надо чтобы событие генерилось через
>строго опр. промежуток времени.

Судя по 10 сек в примере, не сильно-то и строго. Да и системы-то с разделением времени. Поэтому даже sleep вполне подходит, с предварительным вычислением, сколько реально надо спать, и надо ли спать вообще на данном шаге. Если нужны микросекунды, то вместо time/sleep можно использовать gettimeofday/usleep (или select).

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

4. "CreateWaitableTimer "  
Сообщение от from_mars on 21-Янв-09, 06:20 
да ладно, пофег )
еще про libev нашел, с ее помощью тоже можно сделать.


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

5. "CreateWaitableTimer "  
Сообщение от vic (??) on 21-Янв-09, 12:06 
>да ладно, пофег )
>еще про libev нашел, с ее помощью тоже можно сделать.

setitimer() ?

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

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

Индекс форумов | Темы | Пред. тема | След. тема
Оцените тред (1=ужас, 5=супер)? [ 1 | 2 | 3 | 4 | 5 ] [Рекомендовать для помещения в FAQ]




Спонсоры:
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

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