2

開発中の 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 つは別のメッセージ番号を使用するタイマーであり、これが発生しても何も送信しません。

4

1 に答える 1