2011-08-17 40 views
-4

我有一个运行44 * 3 = 132个线程+主线程的应用程序,每3个线程表示一个tcp客户端网络。释放所有这些需要花费大量的时间来完成应用程序,所以我正在寻找一种更快的方法。如何设置主线程的优先级

我只知道一种方法 - 设置优先级。所以每个线程的优先级=正常。我应该如何将主线程的优先级设置为最高级别,以便更快地释放所有其他线程?

+9

更改线程优先级几乎从来都不是解决优化问题的正确方案。 –

+0

当它是你知道的唯一方式时,它是最好的解决方案。你为什么不写下更好的选择? – netboy

+1

'SetThreadPriority(GetCurrentThread,THREAD_PRIORITY_HIGHEST)'? –

回答

8

我想说,你需要看看你的线程正在做什么,并要求他们并行地做。在我服务的应用程序,它可以有上百个线程(部分带子线程),我有停止的循环是有效的:

for I := 0 to ThreadCount - 1 do 
    Threads[I].Terminate; 
for I := 0 to ThreadCount - 1 do 
    Threads[I].WaitFor; 
for I := 0 to ThreadCount - 1 do 
    Threads[I].Free; 

螺纹封闭自己倒在被终止及时,但由要求他们先关闭,然后等待他们,这可以发生得更快。当然,如果第一个线程是最后一个关闭线程,那么中间循环将会非常快,因为它总是只要最慢的线程关闭即可。

如果您的问题没有得到解决,我们需要查看您的代码。

+5

'为I:= 0到ThreadCount'?你确定?或者更好:'对于I:= 0到ThreadCount-1'? –

+1

...甚至'线程中的线程做'... –

6

改变主线程优先级的方法是在其上调用SetThreadPriority。对于手柄,只需使用GetCurrentThread - 您无需打开真正的手柄。

这可能不会对您尝试解决的问题有任何影响,但您并未要求如何解决您的问题;你问如何调整线程优先级。如果你想知道如何让你的线程更快地被释放,那么下次再问一下。