![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Способ(ы) передачи сообщений от главного потока к второстепенным [Delphi, Windows]
Soloton © (2009-10-12 09:03:00)Существует ли Subj?
Интересует реализация на KOL, но в принципе подойдёт любое Delphi-решение.
miek (2009-10-15 09:26:00) [1]подойдет глобальная переменная типа longbool (размер 4 байта, чтобы обращение к ней было атомарным)
Nikolas (2009-10-14 16:12:00) [2]ну тут всё просто - в процедурке которая читает блок данных из файла проверяй переменную - и отмениш просчёт если нужно
естественно что просчёт должен быть в другом потоке, а в переменную пиши из основного потока.
Barloggg (2009-10-13 16:10:00) [3]но проверять все равно придется.
посылать сообщение можно только если создать второй апплет и уже его пользовать как второй процесс. только я не в курсе как можно запустить второй аплет...
Barloggg (2009-10-13 16:08:00) [4]гхм. а что если создать глобальный флаг?
и в потоке вставь апплет.процессмессажес.
это позволит тебе кликать по кнопкам на форме без отрыва от производства.
ну и регулярно проверяй состояние глобального флага.
heilong (2009-10-13 10:59:00) [5]Не хочешь мьютекс, проверяй переменную.
Soloton (2009-10-13 08:09:00) [6]> попробуй ответить для себя более детально - что именно ты
> хочеш реализовать?
Конкретно задача такова. Создаю поток, который обрабатывает кучу файлов -- вычисляет MD5. На объёмистых файлах задерживается конечно же надолго. Хочу кнопочку "Пропустить", которая при нажатии даст знать дочернему процессу, что работу с конкретным файлом нужно прекратить и пристуить к следующему.
> SendMessage
Из основного потока создаёмPTread. При любом из событийOnResume,OnSuspendи т.п. можно послать окну из основного потока посредствомSendMessageилиPostMessage(оSinchronizeвообще молчу) практически любую информацию. А каким образом дать созданному потоку знать, что произошло какое-то событие, например пропустить некоторую часть вычисления, как в Kaspersky Antivirus, когда можно жать "Пропустить", если проверяемый файл слишком долго обрабатывается?
Смотрел в сторону мьютексов, но решение не изящное -- нужно периодически проверять в процессе работы создан мьютекс или нет, что только затормаживает вычисления.
Может в дочернем потоке создавать окно и принимать сообщения?
Dufa (2009-10-12 20:25:00) [7]SendMessage
Nikolas (2009-10-12 20:00:00) [8]попробуй ответить для себя более детально - что именно ты хочеш реализовать?