我正在开发一个 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 个线程在运行,其中一个是使用不同消息编号的计时器,发生这种情况时不发送任何内容。