Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/multithreading/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/delphi/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Multithreading 是否更改Indy10 TCP服务器执行线程优先级以加快执行速度?_Multithreading_Delphi_Indy_Lazarus - Fatal编程技术网

Multithreading 是否更改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

通常,在使用Delphi/Lazarus线程时,可以更改线程的优先级,以便更快地执行

也就是说,是否可以对Indy10 TCP服务器组件执行相同的操作?如果是,怎么做?这样做是否明智


谢谢

TIdTCPServer
使用普通的Delphi/Lazarus线程

如果您在Windows上运行,则可以调用Win32 API
GetCurrentThread()
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很快也会告诉你:)线程不会因为优先级提高而自动执行得更快。为什么你需要“更快的执行”——实际的问题是什么?如果可以通过提高音量使计算机运行得更快,你不认为它们会从盒子里出来,并将音量调到最大吗?