我用印10的TIdCmdTCPServer部件实现我的客户机 - 服务器应用程序。问题是,来自客户端的请求可以是相当复杂的,我的服务器应用程序的GUI部分马上失去响应。从印文档,我得到的印:

  

创建并启动监听线程用于使用线程优先级tpHighest绑定。

我可以改变这种行为?

有帮助吗?

解决方案

正如罗布指出的那样,不改变侦听线程的优先级,降低工作线程的优先级来代替。它可以在的的onConnect()的处理程序访问的 TIdCmdTCPServer 实例,像这样:

procedure TServerForm.IdCmdTCPServer1Connect(AContext: TIdContext);
begin
  // sanity checks need to go here
  TIdYarnOfThread(AContext.Yarn).Thread.Priority := tpLower;
end;

其他提示

设置的优先级监听线程不会解决你的问题更低。所有监听线程正在做的是听,是不是CPU密集型任务。直到连接到达时,该线程没有做任何事情。您可以确认,与喜欢的Process Explorer的工具;我认为它可以显示由线程CPU使用率。

设置优先级低实际上可能使你的服务器出现的的响应,因为当一个连接到达时,线程监听这一方面将优先级较低的运行,将不能够连接上工作立即。客户端将在您的服务器开始处理其请求之前等待一段时间。

在请求不会在侦听线程处理。监听线程代表大部分的工作给其他线程。如果你只有一个TCP结合,那么你就只有一个监听线程,但你可以处理多个并发连接。各连接将由一个单独的线程尽管那里只有一个收听来处理。

无论如何,你可以通过处理服务器对象的OnBeforeListenerRun事件更改优先级。它接收到代表听众线程TIdThread的引用,所以你可以指定一个不同的值,其Priority财产。此外,你的源代码,所以你可以去和改变tpListener常量的定义的 IdGlobalCore.pas 的。该代码使用该值,而不是直接tpHighest

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top