Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Периодический опрос во время работы программы. [D7, WinXP]


Страницы:   1 2

kyn66 ©   (2009-11-02 11:48:00) 

Во время работы программы необходимо периодически делать опрос какого либо типа (к примеру наличие файла в некотором каталоге). Если бы программа состояла из одной формы - то понятно было бы, повесил на таймерное событие и все. Но тут в разные моменты времени могут открываться разные модальные формы. Т.е. получается, что вместе с работой программы должен работать некий дополнительный резидент, я так себе это представляю. Или есть другое решение?


Юрий Зотов   (2009-11-02 23:16:00) [21]

> kyn66 ©   (02.11.09 22:55) [12]

> Честно говоря не совсем понятно о чем идет речь

Вы поймете это, как только ознакомитесь в MSDN с описанием функций Find...ChangeNotification и WaitForSingleObject.

В переводе на русский язык это звучит примерно так:

Подписаться на уведомление о первом изменении файла;
Пока поток не прерван, do
begin
 Ждать уведомления об изменении файла;
 ... // Получив это уведомление, что-то сделать
 Подписаться на уведомление о следующем изменении файла;
end;
Освободить захваченные ресурсы;


kyn66   (2009-11-02 22:55:00) [22]

Честно говоря не совсем понятно о чем идет речь, т.к. никогда не приходилось сталкиваться с такими вещами. Однако век живи - век учись...  В моем понятии применение потоков, даже можно подрядить несколько потоков на каждый проверяемый каталог, дает ничто иное, как параллельное выполнение независимых операций. Только вот смысл затеи в том, чтобы запрограммировать эти действия(однократный запрос) через определенный промежуток времени, установленный в параметрах программы. Как это к примеру делается в TheBat - проверка почты через определенный интервал времени.


Юрий Зотов   (2009-11-02 22:43:00) [23]

Или проще - вместо INFINITE ставить некоторый TimeOut. Выход из цикла и завершение потока произойдут по Terminated.


Leonid Troyanovsky   (2009-11-02 22:00:00) [24]


> Дмитрий Белькевич   (02.11.09 19:07) [9]

> >WaitForSingleObject(H, INFINITE);

> Тред не повиснет??? Думается, что нужно механизмы выхода
> из бесконечного ожидания продумывать.

Все уже придумано до нас.
WaitForSingleObjectEx & QueueUserAPC.

--
Regards, LVT.


Дмитрий Белькевич   (2009-11-02 19:07:00) [25]

>WaitForSingleObject(H, INFINITE);

Тред не повиснет??? Думается, что нужно механизмы выхода из бесконечного ожидания продумывать. Например, делать дополнительный event и WaitForMultipleObject.


clickmaker   (2009-11-02 18:07:00) [26]

> а не постоянно опрашивать.?

H := FindFirstChangeNotification
while not Terminated do
begin
 WaitForSingleObject(H, INFINITE);
 ...
 FindNextChangeNotification(H);
end;
FindCloseChangeNotification(H);


kyn66   (2009-11-02 17:19:00) [27]

Нашел способ как это сделать с помощью потоков. Однако, не совсем понятно, а как потоку сказать выполнить опрос через указанный промежуток времени, а не постоянно опрашивать.?


kyn66   (2009-11-02 12:02:00) [28]


> ОС предоставляет механизмы асинхронной польз.нотификации
> об изменениях в интересующих объектах файловой системы.


Да, знаю про такое. Действительно его можно и применить. Спасибо.


brother   (2009-11-02 12:00:00) [29]

> Т.е. повесить таймер на Main-форму и этого будет достаточно?

если [4] для тебя сложно - то да)


Сергей М.   (2009-11-02 11:59:00) [30]


> периодически делать опрос ...наличие
> файла в некотором каталоге


Дурная затея.
ОС предоставляет механизмы асинхронной польз.нотификации об изменениях в интересующих объектах файловой системы.


kyn66   (2009-11-02 11:56:00) [31]


> brother ©   (02.11.09 11:51) [2]
> > Или есть другое решение?таймер висит на первой созданной
> форме...


Т.е. повесить таймер на Main-форму и этого будет достаточно?


CrytoGen   (2009-11-02 11:51:00) [32]

таймеры нормально работают, когда открываются модальный окна


brother   (2009-11-02 11:51:00) [33]

> Или есть другое решение?

таймер висит на первой созданной форме...


Страницы:   1 2

Наверх

Титульная страница Поиск, карта сайта Написать письмо