2011-12-25 10 views
3

私のCPU 100%を使用する機能が必要です。私は単一のコアCPUを持っていますか?cpuを使用する100%

スレッドを高い優先度で設定する必要がありますか?

+3

downvoteと終了理由please ... – opc0de

+1

それは私ではありませんでしたが、私は同じことをするように誘惑されました....最初の答えを読んだ後で、私は質問のポイントを得ました。あなたが他の人からCPUサイクルを奪うためにOSを賢明にしたいと思ったように聞こえました..... –

+0

あなたが示唆していることは、同じプライオリティのスレッドを遅くするかもしれないことを意識してください。優先度 - CPU経由でのみ取得できます。 30秒ごとに一時的なプライオリティの向上のみを与えるOSアンチスタベーションアルゴリズム。単一のCPUボックスで1つのCPUループスレッドを非常に高い優先度にすると、「電源スイッチ」のリセットが必要になります。 –

答えて

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個のコアを持っている場合は、100%に到達するためにButton1 N回をクリックしてくださいCPU負荷。スレッドの優先度を上げる必要はありません。

+0

終了していないと簡単に終了しました –

+0

@David、スレッドを終了するにはどうしたらいいですか? – kobik

+0

@kobik call –

7

ループ(無限)は、通常、細かい仕事をしていません:

明らかに有用何もせずに100%に行くが、学術目的のために、自分のハードウェア上でのみ行われ、決していずれにもしなければならないCPUを強制的に
while true do begin 

end; 

あなたが出荷しようとしている実際のアプリケーション。

+1

また、これが進行中にアクティブなGUIを使用する場合は、別の(GUI以外のバックグラウンドワーカーでもある)スレッドでこれを生成する必要があります。また、複数のCPU /コアまたはハイパースレッディングを使用している場合は、仮想CPUと同数のスレッドが必要になります。 –

+0

ハッピークリスマスダーリン。確かに一日のための時間! :-) –

+0

私はいつもこのループをしています... ...誤って。 – lkessler

関連する問題