对于某些特定需求,我需要在 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;