Главная страница
    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.048 c
15-1195830190
oldman
2007-11-23 18:03
2007.12.23
Что-то я не понял шуток ХР...


15-1195568459
tesseract
2007-11-20 17:20
2007.12.23
Говорил же. Учите с под Linux.


1-1191498439
Kerk
2007-10-04 15:47
2007.12.23
Количество бит в байте


8-1171310423
man-1982
2007-02-12 23:00
2007.12.23
как из двух изображений сделать одно


15-1195846286
Igor Zorkov
2007-11-23 22:31
2007.12.23
Anatoly Podgoretsky





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