
C++の簡易なプログラムを長時間実行しっぱなしにしたいのですが、
CPUが常に100%の稼働率になってしまうため、PCが熱暴走してしまうのではないかと心配しております。
対策としてはPCの冷却を徹底することも考えられるのですが、
プログラムを工夫して(例えばメモリの使用領域を設定変更する)CPUの負担を軽減することは可能でしょうか?
プログラムの内容は[1000][300000]の配列を宣言し、
1秒間に20回、配列の中身を0~1000まで永遠に書き換え、
その内容をグラフィックで示すものです。
メモリの使用量は膨大になることは覚悟していたのですが、
CPUの稼働率が終始100%になってしまうのは、困っております。
対策をご教授いただけると助かります。
もしくは説明不足な点がありましたらお申し付けください。
No.5ベストアンサー
- 回答日時:
単純な処理なのでCPUが100%になるのは当たり前でしょう。
普通のアプリがCPUが100%にならない理由は、
・ファイルの読み書き待ちでCPUが空いている。
・メッセージ待ちでWAITしている。
などなど何らかの理由でCPUに空きが出来るからです。
どうしても100%にしたく無かったら、sleepするのが定番です。その分処理時間は長くなりますので秒間20回は無理でしょうが。これは仕方ありません。この問題はトレードオフなので、どちらかしか選べないと思います。
効果があるかは不明ですが、配列をランダムにアクセスしているなら、シーケンシャルにアクセスすればCPUの仕組みとしては早くなるはずです。
ありがとうございます。
当方のプログラムは
・メッセージ待ちでWAITしている。
状態でした。
さっそくSleepを使って負荷を低減させてみます。
配列もとりあえず宣言しただけですので、シーケンシャルに
アクセスするように改良します。
大変助かりました。
No.4
- 回答日時:
1秒間に20回と書かれていますがこれはどのようにして実現されていますか?
ビジーループまたはsleepなどよる待ち処理が考えられますが、CPUが100%稼動ということですので、以下の状況が考えられます。
ビジーループの場合:
CPUの処理能力は足りているがビジーループで100%使い切っている
この場合はsleepを使用する方法で待つことでCPU使用率は下がります。
sleepなどによる待ち処理:
CPUの処理能力が足りておらずまったくsleepせず処理しっぱなしになっている。
この場合は処理量を減らす(1秒間に10回などにする)ことでCPUの処理能力を上回らないようにすれば、CPU使用率は下がります。
蛇足ですが、本来はCPUに100%の処理を長時間行わせても熱暴走しない状態で使用するのが通常です。もし長時間の高負荷で熱暴走するのであれば、一瞬の高負荷でも熱暴走する可能性があるので、熱対策をするべきです。
すみません。
ビジーループの状態にしておりました。
グラフィックへの出力待ちの段階で、
間髪入れずにビジーループをかけておりました。
おそらくここの処理速度には余裕がありますので、
早速対策してみます。
ありがとうございます。
No.3
- 回答日時:
>ANo.2
1千回とか1万回に1度、ディスクに書き込むのに作業負荷を
考える必要はありません。
この回答への補足
すみません。説明不足でした。
書き換えは1000まで行くとまた0から
上書きされますので、メモリ使用量の絶対量は
かわりません。
もしもっと処理速度の速い配列のアドレスの設定方法や、
その他対策ご存知でしたらご教授願います。

No.1
- 回答日時:
C++をお使いであれば、マルチスレッドにして、適当にSleepすれば回避できるのではないでしょうか?
C++ ワーカースレッド Thread.Sleep GetMessage PeekMessage
などでググってみられるとサンプルが転がっていると思います。
現役のPGではないので細かなアドバイスができずに恐縮ですが、ヒントになれば幸いです。
この回答への補足
ワーカースレッド調べました。
当方、マイコン制御では何度か使用したことが
あるのですが、PCの場合はスレッドで実行するというのは、
10ある処理速度を単純に5:5にしてしまうなどと、
要は限りある処理能力を分けて使うというものでは
ないのでしょうか?
もしそうであると、現在でもCPUがフル稼働しておりますので、
処理効率が変わらないように思えてしまうのですが、、
無知で申し訳ないです。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
このQ&Aを見た人がよく見るQ&A
人気Q&Aランキング
-
4
小数点を含む数値かどうか判断...
-
5
WindowsMessage(ウィンドウメッ...
-
6
プログラム上のCPU稼働率低減に...
-
7
絶対パスの取得について
-
8
入力した任意の数の平方根を求める
-
9
他サイト数値を自サイトに反映...
-
10
Excel(VBA)でSetTimer関数を使...
-
11
SQLの速度をあげるには・・・
-
12
VBでの簡易電卓の作成(減算方...
-
13
プログラム 擬似コードとはどん...
-
14
C言語:関数を使うメリットとデ...
-
15
C#で書かれたプログラムをバッ...
-
16
異なるプログラミング言語を連...
-
17
clispの実行方法
-
18
DivX再生に必要なマシンスペック
-
19
If Not c Is Nothing Then ~延...
-
20
緯度、経度の 10進法と 60進法...
おすすめ情報
公式facebook
公式twitter