Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
||
ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
[18.116.239.195] |
|
Сообщ.
#1
,
|
|
|
Подскажите пожалуйста.
Создаётся компонент потомок TComponent, у которого есть событие, в нем активизируетсся поток у которого тоже есть событие. то как сделать что бы при возникновении события у потока активизировалось событие у компонента при этом важно чтобы потом поток возобновил работу. |
Сообщ.
#2
,
|
|
|
Цитата V_L @ возникновении события у потока активизировалось событие у компонента присвоить событию потоку обработчик, в котором вызывать событие компоннета. Цитата V_L @ чтобы потом поток возобновил работу. а что в твоей теущей реализации он не возобнавляет работу? ты лудше обрати внимание в контексе какого потока вызываются все эти события.. |
Сообщ.
#3
,
|
|
|
1. Унаследовать компонент от TWinControl.
2. Завести новое сообщение виндовс, допусти WM_MY_MESSAGE = WM_USER + 2005. 3. Написать обработчик сообщения для этого компонента. Примерно так // Объявление procedure OnMyMsg(var Msg: TMessage); message WM_MY_MESSAGE; // Многое пропущенно // Реализация procedure TMyComponent.OnMyMsg(var Msg: TMessage); begin end; 4. При создании потока каким-либо образом передать ему хэндл нашего компонента. 5. При возникновении нужного события в потоке вызвать следующую конструкцию: // Тут что-то произошло PostMessage(Handle, WM_MY_MESSAGE, 0, 0); Так как PostMessage - функция асинхронной передачи сообщений, поток спокойно продолжит свою работу. |
Сообщ.
#4
,
|
|
|
Спасибо за совет.
Но поток создаётся в коде этого компонента и при посылке самому себе сообщения, пишет "Инструкция обратилась к 0000000 память не может читаться" |
Сообщ.
#5
,
|
|
|
Можно взглянуть на кусок кода, создающий поток, и на тот, в котором происходит посылка сообщения?
|
Сообщ.
#6
,
|
|
|
Был вероятно глюк, сейчас все работает.
Почему не понятно(в смысле глюка). |