Статьи Королевства Дельфи

       

Что же, все-таки, можно сделать


Есть три базовых идеи, три "кита", на основе которых можно построить надежный таймерный сервер:

  • Функция Sleep, которая позволяет отсчитать заданное количество миллисекунд, не загружая при этом процессор.
  • Отдельный поток, в котором будет крутиться цикл для отслеживания времени срабатывания.
  • Набор средств уведомления клиентов (в других потоках приложения) о тиках таймеров - объекты ядра для синхронизации потоков, оконные сообщения и др.

Функция Sleep имеет дискретность отработки заданного интервала (по результатам эксперимента) 10 мс в Windows NT и примерно 3-4 мс в Windows 98. Во многих случаях достаточно просто вызвать эту функцию там, где нужна задержка, если потоку больше нечем заняться в течение этого интервала времени.

Цикл в отдельном потоке с вызовом Sleep с постоянным интервалом и опросом списка таймерных объектов (у каждого свой интервал, заданный клиентом) с определением момента срабатывания, позволяет обрабатывать столько виртуальных таймеров, сколько потребуется программе. Высокий приоритет, заданный потоку, даст возможность таймерам "тикать" даже тогда, когда другие потоки заняты работой.

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



Содержание раздела