スローされたメッセージを処理するスレッドに基づくメッセージキューがあります。スレッド内の一部のアクティビティはVCLコマンドである可能性があるため、同期で実行されます。Synchronizeが呼び出されるとすぐに、スレッドがハングします。サンプルコード:
TMessageQ = class (TThread)
...
procedure TMessageQ.do_msg;
begin
case CurrentMessage.Command of
cQSize: if Assigned (OnSize) then OnSize (CurrentMessage);
cQReady: if Assigned (OnReady) then OnReady (CurrentMessage);
end; // case
end; // do_msg /
procedure TMessageQ.doTask (Sender: TObject);
begin
while FQ.Count > 0 do
begin
FSection.Enter;
try
CurrentMessage := FQ.Dequeue;
finally
FSection.Leave;
end; // try..finally
Synchronize (do_msg);
end; // while
end; // doTask //
do_msgのステートメントは処理されていません。誰かが私が間違っていることを知っていますか?