Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "KOL";
Текущий архив: 2014.11.30;
Скачать: [xml.tar.bz2];

Вниз

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

 
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 вся ветка

Форум: "KOL";
Текущий архив: 2014.11.30;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.46 MB
Время: 0.001 c
15-1397823673
ВладОшин
2014-04-18 16:21
2014.11.30
напомните, как сплитер динамически поместить правильно


11-1254906149
Инна
2009-10-07 13:02
2014.11.30
форма в отдельном потоке


2-1385450524
Iriss
2013-11-26 11:22
2014.11.30
Не работает Pos


11-1255323804
Soloton
2009-10-12 09:03
2014.11.30
Способ(ы) передачи сообщений от главного потока к второстепенным


15-1397751666
KilkennyCat
2014-04-17 20:21
2014.11.30
Как правильно сделать запрос SQL





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский