掲示板システム
ホーム
アクセス解析
カテゴリ
ログアウト
ワーカースレッドがメッセージを受信するためには? (ID:16825)
名前
ホームページ(ブログ、Twitterなど)のURL (省略可)
本文
とにかく多くのメッセージが来るということで 取りこぼしありでよければアプリケーションが受け取ったメッセージをThreadに横流しするという手段でPostThreadMessageはどうでしょうか? といっても私も使い方が分からなかったので引用です。 この方法だとアプリケーションがぎこちなくなる事は無いみたいです。 //http://www.elists.org/pipermail/delphi/1999-September/002021.html //を引用 unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls; type TMeThread = class(TThread) private { Private 宣言 } procedure WMUser(var Msg: TWMNoParams); message WM_USER; protected procedure Execute; override; end; type TForm1 = class(TForm) Button1: TButton; procedure Button1Click(Sender: TObject); procedure FormCreate(Sender: TObject); procedure FormDestroy(Sender: TObject); private { Private 宣言 } public { Public 宣言 } MeThread1 :TThread; end; var Form1: TForm1; implementation {$R *.dfm} { TMeThread } procedure TMeThread.Execute; var Msg: TMsg; DMsg: TMessage; begin PeekMessage(Msg,0,0,0,PM_NOREMOVE); // Create Message Queue while not Terminated do begin Sleep(10); // don't eat CPU cycles if PeekMessage(Msg,0,0,0,PM_REMOVE) then begin DMsg.Msg:=Msg.message; DMsg.wParam:=Msg.wParam; DMsg.lParam:=Msg.lParam; DMsg.Result:=0; Dispatch(DMsg); end; end; end; procedure TMeThread.WMUser(var Msg: TWMNoParams); begin Beep; end; //Form1 procedure TForm1.Button1Click(Sender: TObject); var i:integer; begin for i:=0 to 100 do //負荷を掛けてみるテスト PostThreadMessage(MeThread1.ThreadID,WM_USER,0,0); end; procedure TForm1.FormCreate(Sender: TObject); begin caption:='作成しました'; MeThread1:=TMeThread.Create(False); end; procedure TForm1.FormDestroy(Sender: TObject); begin MeThread1.Terminate; MeThread1.WaitFor; end; end.
←解決時は質問者本人がここをチェックしてください。
更新する
戻る
掲示板システム
Copyright 2021 Takeshi Okamoto All Rights Reserved.