![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Создание нити и отправка ей сообщения.
Игорь_ © (2006-10-04 17:39:00)Здравствуйте !
Пробую дождатся когда нить примет сообщение:
hThread:=BeginThread(nil, 0, @TestThread, pParam, 0, ThreadID);
_OK:=PostThreadMessage(ThreadId, MY_MESSAGE, MY_LPARAM, LParam(pParam));
while not _OK do
begin
Sleep(0);
_OK:=PostThreadMessage(ThreadId, MY_MESSAGE, MY_LPARAM, LParam(pParam));
end;
А как узнать, что пора прекращать цикл отправки сообщений ?
Может нить там зависа и не реагирует ?
Игорь_ (2006-10-04 18:18:00) [1]Спасибо Большое !
Leonid Troyanovsky (2006-10-04 18:16:00) [2]
> Leonid Troyanovsky © (04.10.06 18:05) [5]
> > что она получила мое сообщение и спокойно идти дальше,
А.. Sorry.
Видимо, имелось ввиду тот момент, когда поток будет готов
к приему сообщений.
Ну, в этом случае, дейс-но, нужен event [4].
Кстати, в такой архитектуре не нужен и цикл обработки сообщений.
Т.е., вторичному потоку не нужно быть GUI thread,
достаточно одних events.
--
Regards, LVT.
Leonid Troyanovsky (2006-10-04 18:05:00) [3]
> Игорь_ (04.10.06 18:01) [3]
> что она получила мое сообщение и спокойно идти дальше,
Win32Check(PostMessage())
--
Regards, LVT.
Ketmar (2006-10-04 18:02:00) [4]пусть дёргает Event, например. %-)
Игорь_ (2006-10-04 18:01:00) [5]Мне не надо ждать конца работы нити. Я хочу, просто, быть уверенным,
что она получила мое сообщение и спокойно идти дальше,
а ноа пусть своими делами занимается :))
MsGuns (2006-10-04 17:53:00) [6]Если нить без собственного окна, то обмен сообщениями можно реализовать через некий объект (типа record), созданный основным потоком. Перед созданием и запуском вторичного первичный создает эту запись, помещает туда нужную информацию и создает вторичный поток, передавая ему указатель на этот объект. Вторичный поток может "опрашивать" посылаемые первичным потоком "сигналы", просто проверяя содержимое объекта обраящаясь к нему через переданный указатель.
Ответы вторичный поток также может посылать "инициатору" через поля объекта напрямую или используя метод Sinchronize
Leonid Troyanovsky (2006-10-04 17:43:00) [7]
> Игорь_ (04.10.06 17:39)
> Пробую дождатся когда нить примет сообщение:
Для того, чтобы дождаться окончания обработки
нитью посланного сообщения нужно снабдить нить окном.
Ну, и посылать, соо-сно, окну путем SendMessage.
--
Regards, LVT.