開発中の Delphi XE4 サービス アプリケーションがあります。サービスは、一部の長時間実行タスクのスレッドを開始し、スレッドは PostThreadMessage 呼び出しでステータスを返します。
メインの ServiceExecute ループは次のようになります。
procedure TScanService.ServiceExecute(Sender: TService);
var
CurrentMessage: TMsg;
begin
LogServerEvent('ServiceExecute', 'Starting');
while not Terminated do
begin
if not PeekMessage(CurrentMessage, 0, WM_NULL, msgHigh, PM_NOREMOVE) then
begin
Sleep(1000);
Continue;
end;
GetMessage(CurrentMessage, 0, WM_NULL, msgHigh);
LogServerEvent('ServiceExecute', 'CurrentMessage.message', IntToStr(CurrentMessage.message));
LogServerEvent('ServiceExecute', 'CurrentMessage.wParam', IntToStr(CurrentMessage.wParam));
LogServerEvent('ServiceExecute', 'CurrentMessage.lParam', IntToStr(CurrentMessage.lParam));
スレッドでは、メッセージ送信は次のようになります。
gThreadNumber: Integer;
LogThreadEvent('Execute', 'Found Notice, Thread number: ' + IntToStr(gThreadNumber));
PostThreadMessage(ParentThreadID, msgFound, gThreadNumber, 6);
メッセージは正常に到着し、メッセージ番号は正しい (msgFound = WM_USER + 1)。しかし、wParam、lParam に対して 0、6 を送信したところ、4、0 が返されました。何が欠けていますか?
注: コードには 2 つのスレッドしか実行されておらず、1 つは別のメッセージ番号を使用するタイマーであり、これが発生しても何も送信しません。