Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2007.08.12;
Скачать: CL | DM;

Вниз

Что-то вроде событий, вызываемых потоком.   Найти похожие ветки 

 
Sdubaruhnul   (2007-07-17 21:50) [0]

Здравствуйте, Мастера.

У меня такой вопрос по потокам. Поток выполняет какие-то действия, например, ищет файлы. Хотелось бы организовать события по поводу нахождения очередного подходящего файла. Но, как мне кажется, если делать это также, как обычно делается в компонентах и объектах вообще, то поток будет ждать обработки события, что, как мне кажется, нежелательно.

Как можно решить эту проблему? Думается, что можно использовать сообщения, но есть ли другие способы?


 
TUser ©   (2007-07-17 21:53) [1]

Для сообщений в потоке надо организовывать самостоятельно очередь. В твоем случае это можно сделать с меньшей нагрузкой на систему, через объекты синхронизации. Например, ищущий поток ппосле нахождения чего-то выходит из критической секции, а ждущий поток, соотвественно заходит туда.


 
Сергей М. ©   (2007-07-18 09:51) [2]


> Sdubaruhnul   (17.07.07 21:50)


В конструкторе своего поточного класса создавай StringList и окно (AllocateHwnd), в деструкторе, соотв-но, уничтожай окно (DeallocateHWnd) и StringList.

В теле поточной ф-ции при нахождении файла в крит.секции добавляй инф-цию о нем в "хвост" StringList и посылай (PostMessage) своему окну спецсообщение.

В теле оконного метода своего окна в крит.секции выбирай из "головы" StringList"а инфу о файле и вызывай с этим параметром обработчик своего спецсобытия, если он назначен. Если после окончания обработки StringList  еще не пуст, тут же посылай (PostMessage) своему окну спецсообщение.


 
Сергей М. ©   (2007-07-18 09:54) [3]


> Sdubaruhnul


Не забывай при этом, что поток, вызвавший конструктор твоего доп.потока, ответственен за своевременную диспетчеризацию оконных сообщений.


 
Сергей М. ©   (2007-07-18 10:11) [4]


> В теле поточной ф-ции при нахождении файла в крит.секции
> добавляй инф-цию о нем в "хвост" StringList и посылай (PostMessage)
> своему окну спецсообщение


Посылать сообщение достаточно 1 раз, при условии что StringList перед добавлением был пуст.

Эта коррекция необходима во избежание "захламления" очереди оконных сообщений большим кол-вом необработанных спецсообщений.


> Если после окончания обработки StringList  еще не пуст,
> тут же посылай (PostMessage) своему окну спецсообщение


Здесь тоже нужна коррекция по той же причине :

Если после окончания обработки StringList  еще не пуст,
тут же посылай выбирай очередной элемент из "головы" StringList и повторяй вызов обработчика своего спецсобытия с этим параметром.



Страницы: 1 вся ветка

Текущий архив: 2007.08.12;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.037 c
15-1184156044
trubin
2007-07-11 16:14
2007.08.12
Загрузить, Закачать, Скачать или ...


2-1184221584
Aletar
2007-07-12 10:26
2007.08.12
Popup меню в ListView


2-1184865192
Leggin
2007-07-19 21:13
2007.08.12
Проблемма: работа программы под разными учетными записями.


11-1166902282
Trible
2006-12-23 22:31
2007.08.12
Как уничтожить форму с компонентами


15-1184400782
iZEN
2007-07-14 12:13
2007.08.12
В чём философский смысл побелки бордюров?