
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で質問しましょう!
似たような質問が見つかりました
- 画像編集・動画編集・音楽編集 PowerDirector21 動画出力時のCPU稼働率が急に下がってしまう原因を教えてください 2 2023/03/30 20:54
- その他(コンピューター・テクノロジー) 50台の織機から回転数を取得・集計しモニターに表示したい 2 2022/11/05 15:48
- その他(プログラミング・Web制作) プログラムの勉強のおすすめは 7 2022/12/09 20:09
- Visual Basic(VBA) ファイル全てを .xlsm に変更したところ、プログラムが途中で落ちてしまっています 17 2022/12/07 12:03
- ビデオカード・サウンドカード メイン機とは別に、初自作としてpcを組みました。 pcスペック cpu ryzen5 5500 グラ 1 2023/05/15 12:22
- UNIX・Linux 低スペックPCで軽量Linuxを動かしました。軽快に動かすには間隔をあけるとのが有効ですか? 3 2022/07/30 13:13
- CPU・メモリ・マザーボード PCゲームでCPU使用率が全コアフル稼働になりません 3 2022/11/06 18:54
- デスクトップパソコン ゲーミングデスクトップPCでマインクラフトなどの比較的負荷が軽いゲームを録画・編集・エンコードしてY 3 2023/02/09 21:44
- CPU・メモリ・マザーボード ゲーミングpcのファンのことについて教えて欲しいです。 6 2023/03/05 07:44
- デスクトップパソコン ん~…分からん 7 2022/06/10 10:47
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
Excelでのセル内容の高速消去方法
-
絶対パスの取得について
-
小数点を含む数値かどうか判断...
-
c言語で自然数nを入力、2以上n...
-
SQLの速度をあげるには・・・
-
C言語プログラミングで、多項式...
-
TCPプログラムについて質問です
-
Excel VBAにて、2GB超の点群デ...
-
K6-3のwrite allocate機能って...
-
ソケットからの入力をWaitForMu...
-
C言語に於けるバイナリデータ
-
Macターミナルで実行中のプログ...
-
C言語で、メモリを解放しないで...
-
SendMessageが失敗するときがある
-
レジスタマップって何ですか?
-
VBSの処理中一旦処理を止めて再...
-
グラフィックLCD SG12...
-
C# シリアル通信でデータ受信...
-
メッセージボックスのボタン名変更
-
分を時間に変換するプログラム
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
win10で、正確な待ち時間の作り方
-
Excelでのセル内容の高速消去方法
-
Excel VBAにて、2GB超の点群デ...
-
小数点を含む数値かどうか判断...
-
プログラム上のCPU稼働率低減に...
-
SQLの速度をあげるには・・・
-
DoEvents関数って何?
-
基本情報技術者試験詳しい方へ...
-
実行時のCPU使用率を増やしたい
-
VC++2010 GDIオブジェクトの解...
-
C言語 時刻差分の算出方法
-
ナップザック問題?をエクセル...
-
Excel(VBA)でSetTimer関数を使...
-
エクセルVBA 時間抜けの取得
-
VBでの簡易電卓の作成(減算方...
-
ノットイコールを教えて下さい
-
If Not c Is Nothing Then ~延...
-
Excel VBA データ削除の高速化
-
絶対パスの取得について
-
テキスト処理の速度の速い言語
おすすめ情報