Конференция "KOL" » Способ(ы) передачи сообщений от главного потока к второстепенным [Delphi, Windows]
 
  • Soloton © (12.10.09 09:03) [0]
    Существует ли Subj?
    Интересует реализация на KOL, но в принципе подойдёт любое Delphi-решение.
  • Nikolas (12.10.09 20:00) [1]
    попробуй ответить для себя более детально - что именно ты хочеш реализовать?
  • Dufa © (12.10.09 20:25) [2]
    SendMessage
  • Soloton © (13.10.09 08:09) [3]
    > попробуй ответить для себя более детально - что именно ты
    > хочеш реализовать?

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

    > SendMessage
    Из основного потока создаём
    PTread

    . При любом из событий
    OnResume

    ,
    OnSuspend

    и т.п. можно послать окну из основного потока посредством
    SendMessage

    или
    PostMessage

    Sinchronize

    вообще молчу) практически любую информацию. А каким образом дать созданному потоку знать, что произошло какое-то событие, например пропустить некоторую часть вычисления, как в Kaspersky Antivirus, когда можно жать  "Пропустить", если проверяемый файл слишком долго обрабатывается?
    Смотрел в сторону мьютексов, но решение не изящное -- нужно периодически проверять в процессе работы создан мьютекс или нет, что только затормаживает вычисления.
    Может в дочернем потоке создавать окно и принимать сообщения?
  • heilong (13.10.09 10:59) [4]
    Не хочешь мьютекс, проверяй переменную.
  • Barloggg (13.10.09 16:08) [5]
    гхм. а что если создать глобальный флаг?
    и в потоке вставь апплет.процессмессажес.
    это позволит тебе кликать по кнопкам на форме без отрыва от производства.
    ну и регулярно проверяй состояние глобального флага.
  • Barloggg (13.10.09 16:10) [6]
    но проверять все равно придется.
    посылать сообщение можно только если создать второй апплет и уже его пользовать как второй процесс. только я не в курсе как можно запустить второй аплет...
  • Nikolas (14.10.09 16:12) [7]
    ну тут всё просто - в процедурке которая читает блок данных из файла проверяй переменную - и отмениш просчёт если нужно
    естественно что просчёт должен быть в другом потоке, а в переменную пиши из основного потока.
  • miek (15.10.09 09:26) [8]
    подойдет глобальная переменная типа longbool (размер 4 байта, чтобы обращение к ней было атомарным)
 
Конференция "KOL" » Способ(ы) передачи сообщений от главного потока к второстепенным [Delphi, Windows]
Есть новые Нет новых   [134431   +11][b:0][p:0.001]