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

Вниз

Способ(ы) передачи сообщений от главного потока к второстепенным   Найти похожие ветки 

 
Soloton ©   (2009-10-12 09:03) [0]

Существует ли Subj?
Интересует реализация на KOL, но в принципе подойдёт любое Delphi-решение.


 
Nikolas   (2009-10-12 20:00) [1]

попробуй ответить для себя более детально - что именно ты хочеш реализовать?


 
Dufa ©   (2009-10-12 20:25) [2]

SendMessage


 
Soloton ©   (2009-10-13 08:09) [3]

> попробуй ответить для себя более детально - что именно ты
> хочеш реализовать?

Конкретно задача такова. Создаю поток, который обрабатывает кучу файлов -- вычисляет MD5. На объёмистых файлах задерживается конечно же надолго. Хочу кнопочку "Пропустить", которая при нажатии даст знать дочернему процессу, что работу с конкретным файлом нужно прекратить и пристуить к следующему.

> SendMessage
Из основного потока создаём PTread. При любом из событий OnResume, OnSuspend и т.п. можно послать окну из основного потока посредством SendMessage или PostMessageSinchronize вообще молчу) практически любую информацию. А каким образом дать созданному потоку знать, что произошло какое-то событие, например пропустить некоторую часть вычисления, как в Kaspersky Antivirus, когда можно жать  "Пропустить", если проверяемый файл слишком долго обрабатывается?
Смотрел в сторону мьютексов, но решение не изящное -- нужно периодически проверять в процессе работы создан мьютекс или нет, что только затормаживает вычисления.
Может в дочернем потоке создавать окно и принимать сообщения?


 
heilong   (2009-10-13 10:59) [4]

Не хочешь мьютекс, проверяй переменную.


 
Barloggg   (2009-10-13 16:08) [5]

гхм. а что если создать глобальный флаг?
и в потоке вставь апплет.процессмессажес.
это позволит тебе кликать по кнопкам на форме без отрыва от производства.
ну и регулярно проверяй состояние глобального флага.


 
Barloggg   (2009-10-13 16:10) [6]

но проверять все равно придется.
посылать сообщение можно только если создать второй апплет и уже его пользовать как второй процесс. только я не в курсе как можно запустить второй аплет...


 
Nikolas   (2009-10-14 16:12) [7]

ну тут всё просто - в процедурке которая читает блок данных из файла проверяй переменную - и отмениш просчёт если нужно
естественно что просчёт должен быть в другом потоке, а в переменную пиши из основного потока.


 
miek   (2009-10-15 09:26) [8]

подойдет глобальная переменная типа longbool (размер 4 байта, чтобы обращение к ней было атомарным)



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

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

Наверх




Память: 0.48 MB
Время: 0.007 c
2-1385473851
sas9568635
2013-11-26 17:50
2014.11.30
Dll-модули


4-1270641367
groog
2010-04-07 15:56
2014.11.30
Как убрать полосу прокрутки у консольного окна?


15-1398157909
Виктор1985
2014-04-22 13:11
2014.11.30
Трюки в Delphi


4-1270532796
Дмитрий С
2010-04-06 09:46
2014.11.30
Список запущенных приложений (тот что на панели задач).


15-1397651154
Дмитрий СС
2014-04-16 16:25
2014.11.30
Флешка как CD-ROM