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

Вниз

Обработка сообщений в невизуалных класах.   Найти похожие ветки 

 
BattleCruser   (2007-11-27 13:01) [0]

Есть консольное приложение,  и в консоле работает поток ему посылается собщение PostThreadMessage() из другого приожения;
Как обработать (принять) его в потоке консольного приложения?


 
Сергей М. ©   (2007-11-27 13:07) [1]

Точно так же, как и в любом другом потоке любого другого приложения.


 
BattleCruser   (2007-11-27 13:32) [2]

Например, так сойдет?

Type NewThread =class(TThread)
  //......
  Procedure ThreadeMessage(var Msg:TMessage); message;
 //.......
end;


 
Сергей М. ©   (2007-11-27 13:34) [3]

Это всего лишь объявление метода-обработчика, не более того.


 
BattleCruser   (2007-11-27 13:51) [4]

имелось ввиду приблизительно так:

Type NewThread =class(TThread)
 //......
 Procedure ThreadeMessage(var Msg:TMessage); message;
//.......
end;

Const
 TH_FINISHED = 1;
 TH_FOUND:   = 2;

implementation

Procedure ThreadeMessage(var Msg:TMessage);
begin

 case Msg.WParam of
 
   TH_FINISHED: begin
                  //fineshed
                end;
   
   TH_FOUND:    begin
                  // Find
                end;
end;  

end;

end.


 
Джо ©   (2007-11-27 13:55) [5]

> [4] BattleCruser   (27.11.07 13:51)
> имелось ввиду приблизительно так:

С чего вы взяли, что сообщения будут направляться вашему ThreadeMessage?


 
BattleCruser   (2007-11-27 13:59) [6]

A если объявить так:

как для оконного пиложения
Procedure ThreadeMessage(var Msg:TMessage); message; WM_USER + 1
В сообщении PostThreadMessage() указать хендл потока, будет работать?


 
BattleCruser   (2007-11-27 14:02) [7]


> Джо ©   (27.11.07 13:55) [5]



> С чего вы взяли, что сообщения будут направляться вашему
> ThreadeMessage?


Ни счего это я и желаю узнать как нужно делать, что бы направлялись.
Ни где толком прочитать не могу как делатьнадо.


 
Сергей М. ©   (2007-11-27 14:07) [8]


> Ни где толком прочитать не могу как делатьнадо


в теле Execute следует организовать цикл

while not Terminated and GetMessage(Msg, 0, 0, 0) do Dispatch(Msg.Message)


 
palva ©   (2007-11-27 15:53) [9]

Чтобы получить сообщение адресованное потоку, нужно вызвать функцию GetMessage или PeekMessage. Поскольку у вас нет Application и нет окон, то цикл получения сообщений и обработку сообщений в консольном приложении организуйте на ваше усмотрение.


 
palva ©   (2007-11-27 17:36) [10]

Вот примерчик. Может, что-нибудь некорректно написал.
Здесь существенно, что первый вызов PostThreadMessage происходит после того, как произошел первый вызов GetMessage, и в созданном потоке создалась очередь сообщений. Если очереди сообщений в потоке не оказалось, то функция PostThreadMessage завершается неудачей.
{$APPTYPE CONSOLE}
uses Windows, Dialogs;
var
 id1 : LongWord;
 thread1 : THandle;
 code: DWord;
 msg: TMsg;
 i: Integer;

function ThreadFun1(Parameter : Pointer) : Integer;
begin
 repeat
   GetMessage(msg, 0, 0, 0);
   WriteLn(msg.message);
 until msg.message = 8;
 ShowMessage("Click to end");
 Result := 0;
end;

begin
 thread1 := CreateThread(nil, 0, @ThreadFun1, Nil, 0, id1);
 for i:= 5 to 8 do begin
   Sleep(100);
   PostThreadMessage(id1, i, 0, 0);
 end;
 repeat
   Sleep(1000);
   PostThreadMessage(id1, 5, 0, 0);
   GetExitCodeThread(thread1, code);
 until Not (code = STILL_ACTIVE);
 WriteLn("OK");
 CloseHandle(thread1);
end.



Страницы: 1 вся ветка

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

Наверх




Память: 0.47 MB
Время: 0.045 c
1-1191318839
YuriKoltsov
2007-10-02 13:53
2007.12.23
Системный разделитель дробной части


15-1195680552
Суслик
2007-11-22 00:29
2007.12.23
Виртуальная конференция от CodeGear!!!


3-1187164866
GanibalLector
2007-08-15 12:01
2007.12.23
insert в поле ftTime


15-1195852567
Evanescence
2007-11-24 00:16
2007.12.23
как в php-nuke 8 заменить динамические адреса на статические?


15-1195867805
SerJaNT
2007-11-24 04:30
2007.12.23
Помогите составить 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
Английский Французский Немецкий Итальянский Португальский Русский Испанский