Multithreading 是否更改Indy10 TCP服务器执行线程优先级以加快执行速度?
通常,在使用Delphi/Lazarus线程时,可以更改线程的优先级,以便更快地执行 也就是说,是否可以对Indy10 TCP服务器组件执行相同的操作?如果是,怎么做?这样做是否明智Multithreading 是否更改Indy10 TCP服务器执行线程优先级以加快执行速度?,multithreading,delphi,indy,lazarus,Multithreading,Delphi,Indy,Lazarus,通常,在使用Delphi/Lazarus线程时,可以更改线程的优先级,以便更快地执行 也就是说,是否可以对Indy10 TCP服务器组件执行相同的操作?如果是,怎么做?这样做是否明智 谢谢TIdTCPServer使用普通的Delphi/Lazarus线程 如果您在Windows上运行,则可以调用Win32 APIGetCurrentThread()和SetThreadPriority()函数。或者,您可以使用Indy的SetThreadPriority()(Indy 9及更早版本)或IndySe
谢谢
TIdTCPServer
使用普通的Delphi/Lazarus线程
如果您在Windows上运行,则可以调用Win32 APIGetCurrentThread()
和SetThreadPriority()
函数。或者,您可以使用Indy的SetThreadPriority()
(Indy 9及更早版本)或IndySetThreadPriority()
(Indy 10)函数设置Thread
对象的优先级
如果您使用的是现代Delphi版本,则可以使用TThread.CurrentThread
属性获取表示调用线程的TExternalThread
对象TExternalThread
是TThread
的子体,因此可以将其传递给indysethreadpriority()
,也可以直接设置TThread.Priority
属性
如果您想直接访问Indy自己的TThread
对象,可以这样做,具体取决于您使用的Indy版本:
如果您使用的是Indy 9及更早版本,服务器事件将提供一个TIdPeerThread
对象指针TIdPeerThread
是TThread
的子体。很简单
另一方面,如果您使用的是Indy 10,它会特意隐藏/抽象线程。服务器事件现在提供一个
TIdContext
对象指针,而TIdContext
不是线程本身。但这一切并没有失去。如果TIdTCPServer.Scheduler
属性指向一个TIdSchedulerOfThread
派生组件(TIdTCPServer
在内部使用TIdSchedulerOfThreadDefault
,如果不提供调度器
),然后,您可以将TIdContext.Thread
属性强制转换为TIdYarnOfThread
对象指针,然后访问TIdYarnOfThread.Thread
属性,该属性是TIdThreadWithTask
对象指针TIdThreadWithTask
是TThread
的后代。毫无疑问,Remy很快也会告诉你:)线程不会因为优先级提高而自动执行得更快。为什么你需要“更快的执行”——实际的问题是什么?如果可以通过提高音量使计算机运行得更快,你不认为它们会从盒子里出来,并将音量调到最大吗?