Главная страница
    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.004 c
4-1270641367
groog
2010-04-07 15:56
2014.11.30
Как убрать полосу прокрутки у консольного окна?


15-1397939403
Юрий
2014-04-20 00:30
2014.11.30
С днем рождения ! 20 апреля 2014 воскресенье


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


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


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





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский