CPUやメモリに負荷を段階的にかけ、全体の処理を重くするソフト
を作成したいけどどの様にすればいいの?
こんな感じ(下)くるくるコンピュータ
http://hp.vector.co.jp/authors/VA010102/tc120.lzh
スレッドを作成しているみたいですね。その中で計算やらしながらループさせて、負荷をかけているんだと思います。
メモリは、GetMemoryなどで確保すればいいと思います。
Delphiを始めたばかりの初心者なので
具体的にどの様にすればいいのでしょう?
Google等で検索しても、それらしいHPも見つかりません。
どのように検索しました?
TThreadとDelphiで検索すると出てきます。
http://www.borland.co.jp/tips/delphi/dh004/thread_1.html
ここに、BorlandのTipsがあります。
簡単に説明すると、TThreadを継承したクラスのExecuteプロシージャを用意すればOKです。
Executeプロシージャが終了するとスレッドも終了してしまうので、ループさせるとよいでしょう。
GetMemoryよりGetMemならわかりやすいでしょうか。
VCLのヘルプで出ると思います。GetMemしたメモリは、FreeMemすれば解放されます。
ごめんなさい説明不足でした。
スレッドの作成は、わかったのですがスレッド内で
どの様なことをしたら負荷をかけることが出来るかが
知りたかったのです。
procedure TMyThread.Execute;
var
X,Y,Z: Extended;
begin
while not Terminated do begin
Randomize;
X := Random; // 乱数を生成
Y := Random; // 乱数を生成
Z := Power(X,Y);
// Form1.DummyLabel.Caption := FormatFloat('0.000E+00',Z);
end;
end;
こんな感じで、実行してみたのですがたいして負荷がかかりませんでした。
コメントの部分を有効にすれば重くなりますが、こういう使い方は御法度
かな?
CPUにわざと負荷をかけるんですから、わざとご法度を犯さないといけないのではないでしょうか?
ただ、それだけじゃちょっと少なすぎる気がしますけど。
わたしならもうちょっとめちゃくちゃにやると思います(^^ゞ
ところで、Form1は、このスレッド内のものですか?
TThreadのヘルプページにもありますけど、メインスレッドのものはそのまんまではいじれませんよ。
それだと、最適化されると何もしないループになってしまうかも。
負荷をかけるには、負荷のかかる処理をするだけです。
簡単に思いつくのは、円周率の計算とか、多倍長演算とか。
プロセスメモリ内部の文字列検索なんかも負荷がかかると思います。
それと、スレッドからVCLをいじるには、Synchronizedで呼び出さないといけません。
ツイート | ![]() |