Главная страница
    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.036 c
4-1179815919
Magedon
2007-05-22 10:38
2007.12.23
Send To i n Vista


6-1176124977
paradox
2007-04-09 17:22
2007.12.23
подключение через сокеты


9-1164018658
Ярослав Ерёменко
2006-11-20 13:30
2007.12.23
Алгоритм отрисовки тайлов методом альфа-блендинга


15-1195585647
lookin
2007-11-20 22:07
2007.12.23
Непонятно - а чем телефон лучше песни?


15-1196121599
Германн
2007-11-27 02:59
2007.12.23
Опять offtop, но не могу сдержаться.





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