The OpenNET Project / Index page

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

Использование пересекающихся таймеров в программе. (timeout connect time java)


<< Предыдущая ИНДЕКС Поиск в статьях src Установить закладку Перейти на закладку Следующая >>
Ключевые слова: timeout, connect, time, java,  (найти похожие документы)
Date: Fri, 11 Oct 2002 22:17:30 +0600 From: Ramazan Ja-Far <ramazanjf@svitonline.com> Newsgroups: ftn.ru.unix.prog Subject: Использование пересекающихся таймеров в программе. AP>Я имел ввиду вот что. Скажем, пишу я два куска кода. В одном таймер AP>используется, чтобы организовать timeout на connect, а в другом на AP>целую последовательность операций (ну, например, на вытаскивание файла AP>по FTP). По отдельности оба куска работают замечательно. Hо если я AP>захочу скрестить их вместе (например, использовать "умный" connect AP>из первого куска кода в качестве connect'а для FTP-библиотеки), то AP>они немедленно подерутся за таймер. Эта проблема решается написанием умного таймера. К примеру, таймер имеет список отрезков времени и соответствующих дескрипторов файлов, через которые он будет сигналить. Плюс мутекс, контролирующий доступ к списку и 1 dedicated waiting thread. Допустим, есть два потока (threads). 1-й просит таймер просигналить через 20000 миллисекунд. 2-й - через 100. В список складываем два задания - ждать 100 мсек и сигналить 2-му потоку, а потом ждать 19900мсек и сигналить 1-му в указанный дескриптор. Dedicated thread или ничего не делает, или ждёт с таймаутом (таймаут берётся из первого задания в списке) на каком-нибудь объекте. Этот объект сигналят потоки, когда нужно изменять задание в начале списка или отменять задания. Проснувшись, dedicated timer thread захочет узнать, сколько он спал, если конечно его разбудили, а не закончился таймаут, - и скорректировать время для следующих заданий. В списке можно держать время в виде delta от предыдущего задания, или абсолютные значения - на вкус реализатора (implementor). В общем, я подобное писал на Java. Там можно ждать на чём угодно - java.lang.Object.wait(long msec), java.lang.Object.notify(), java.lang.Object.notifyAll() :-) Думаю, аборигенам RU.UNIX.PROG не составит труда воплотить идею... P.S. all abovementioned should be considered as general idea, having been implemented by author in Java, but never in C/POSIX.

<< Предыдущая ИНДЕКС Поиск в статьях src Установить закладку Перейти на закладку Следующая >>

Ваш комментарий
Имя:         
E-Mail:      
Заголовок:
Текст:





  Закладки на сайте
  Проследить за страницей
Created 1996-2017 by Maxim Chirkov  
ДобавитьРекламаВебмастеруГИД  
Hosting by Ihor