The OpenNET Project / Index page

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

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


<< Предыдущая ИНДЕКС Поиск в статьях src Установить закладку Перейти на закладку Следующая >>
Ключевые слова: timeout, connect, time, java,  (найти похожие документы)
Date: Fri, 11 Oct 2002 22:17:30 +0600 From: Ramazan Ja-Far <[email protected]> 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:
Заголовок:
Текст:




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

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