2011-12-25 115 views
3

我需要一个功能,将使用我的CPU 100%。我有一个单一的核心cpu任何ideeas?使用CPU 100%

是否需要将线程设置为高优先级?

+3

downvote and closing reason please ... – opc0de 2011-12-25 13:53:44

+1

它不是我,但我很想做同样的事情......只有在阅读第一个答案后,我才明白了问题的关键。这听起来像是你想超越操作系统窃取从其他人的CPU周期..... – 2011-12-25 14:24:37

+0

请注意,你的建议可能会减缓同样优先级的线程,不会影响优先级较高的线程,并瘫痪那些较低优先级的线程优先级 - 他们只能通过获取CPU。操作系统反饥饿算法只能每隔30秒给予一次临时优先级提升。在单个CPU盒子上将一个CPU环路线程提升至非常高的优先级可能需要重新设置“电源开关”。 – 2011-12-25 14:44:29

回答

5

例如,由一个线程:

unit Unit2; 

interface 

uses 
    Classes; 

type 
    TLoadThread = class(TThread) 
    public 
    class var Stop: Boolean; 
    protected 
    procedure Execute; override; 
    public 
    constructor Create; 
    end; 

implementation 

constructor TLoadThread.Create; 
begin 
    inherited Create; 
    FreeOnTerminate:= True; 
end; 

procedure TLoadThread.Execute; 
begin 
    repeat until Stop; 
end; 

end. 

的利用方法:

type 
    TForm1 = class(TForm) 
    Button1: TButton; 
    Button2: TButton; 
    procedure Button1Click(Sender: TObject); 
    procedure Button2Click(Sender: TObject); 
    end; 

var 
    Form1: TForm1; 

implementation 

uses Unit2; 

{$R *.dfm} 

procedure LoadCPU; 
begin 
    TLoadThread.Stop:= False; 
    TLoadThread.Create; 
end; 

procedure TForm1.Button1Click(Sender: TObject); 
begin 
    LoadCPU; 
end; 

procedure TForm1.Button2Click(Sender: TObject); 
begin 
    TLoadThread.Stop:= True; 
end; 

如果你的CPU有N个核,单击Button1 N倍,达到100% CPU负载;不需要增加线程优先级。

+0

更容易做,而不是终止 – 2011-12-25 16:33:30

+0

@David,你将如何告诉线程终止呢? – kobik 2011-12-25 17:07:45

+0

@kobik调用终止 – 2011-12-25 17:10:33

7

环路(无限),通常做这项工作罚款:

while true do begin 

end; 

显然迫使CPU达到100%,没有做什么有用的东西只为学术目的和自己的硬件和从未在任何应该做的事真正的应用程序,你打算发货。

+1

此外,如果您希望在进行此操作时拥有活动的GUI,则需要在单独的(非GUI后台工作者)线程中产生此类GUI。另外,如果您有多个CPU /内核或超线程,则需要与虚拟CPU相同的线程数。 – 2011-12-25 13:59:33

+0

圣诞快乐达林。时间一天休息! :-) – 2011-12-25 15:26:23

+0

我一直在循环......无意中。 – lkessler 2011-12-25 16:14:47