Delphi 프로젝트에서 스레드 클래스 TMyThread를 파생시키고 포럼의 조언에 따라 AllocateHWnd를 사용하여 창 핸들을 만듭니다. TMyThread 객체에서 SendMessage를 호출하여 윈도우 핸들에 메시지를 보냅니다.SendMessage가 AllocateHWND에 의해 생성 된 윈도우로 인해 교착 상태가 발생합니다.
보낸 메시지가 작은 볼륨에 있으면 응용 프로그램이 잘 작동합니다. 그러나 메시지가 대량 인 경우 응용 프로그램은 교착 상태에 빠져 응답을 잃게됩니다. 나는 메시지 큐가 LogWndProc처럼 완전하다고 생각하지만, 메시지를 처리하는 코드 만 있지만 큐에서 메시지를 제거하는 코드가 없기 때문에 처리 된 모든 메시지가 큐에 남아 큐가 가득 차게 될 수도있다. . 그 맞습니까?
코드는 아래 첨부 :
var
hLogWnd: HWND = 0;
procedure TForm1.FormCreate(Sender: TObject);
begin
hLogWnd := AllocateHWnd(LogWndProc);
end;
procedure TForm1.FormDestroy(Sender: TObject);
begin
if hLogWnd <> 0 then
DeallocateHWnd(hLogWnd);
end;
procedure TForm1.LogWndProc(var Message: TMessage);
var
S: PString;
begin
if Message.Msg = WM_UPDATEDATA then
begin
S := PString(msg.LParam);
try
List1.Items.Add(S^);
finally
Dispose(S);
end;
end else
Message.Result := DefWindowProc(hLogWnd, Message.Msg, Message.WParam,
Message.LParam);
end;
procedure TMyThread.SendLog(I: Integer);
var
Log: PString;
begin
New(Log);
Log^ := 'Log: current stag is ' + IntToStr(I);
SendMessage(hLogWnd, WM_UPDATEDATA, 0, LPARAM(Log));
Dispose(Log);
end;
을 그건 그렇고, 당신이 대답을 받아들이는 방법을 배웠 시간이다. 이전 질문을 다시 살펴보십시오. –