いくつかの特定のニーズのために、dll でソケット要求 (または応答) を待機するプロシージャを作成する必要があります。
TForm1 = class(TForm)
ServerSocket1: TServerSocket;
......
procedure MyWaitProc; stdcall;
begin
Go := false;
while not Go do
begin
// Wating...
// Application.ProcessMessages; // Works with this line
end;
end;
procedure TForm1.ServerSocket1ClientRead(Sender: TObject;
Socket: TCustomWinSocket);
begin
MessageBoxA(0, PAnsiChar('Received: '+Socket.ReceiveText), '', MB_OK);
Go := true;
end;
exports
MyWaitProc;
私が呼び出すとApplication.ProcessMessages
、すべてが正常に機能します。アプリケーションはリクエストを待ってから続行します。しかし、私の場合、呼び出すApplication.ProcessMessages
と、ホスト アプリケーション (dll のものではない) のメイン フォームのロックが解除されます。アプリケーションを呼び出さないとApplication.ProcessMessages
、メッセージを処理できないため、ハングアップします...
では、ソケットの回答を待っているようなプロシージャを作成するにはどうすればよいでしょうか? を使用せずにソケットの応答を待つ方法はありますApplication.ProcessMessages
か?
編集
TIdTCPServer も使用しようとしましたが、何らかの理由で結果は同じです。
TForm1 = class(TForm)
IdTCPServer1: TIdTCPServer;
.....
procedure MyWaitProc; stdcall;
begin
Go := false;
while not Go do
begin
// Waiting ...
// Application.ProcessMessages;
end;
end;
procedure TForm1.IdTCPServer1Execute(AContext: TIdContext);
var
s: string;
begin
s := AContext.Connection.Socket.ReadString(1);
AllText := AllText + s;
Go := True;
end;