※上記の広告は60日以上更新のないWIKIに表示されています。更新することで広告が下部へ移動します。

無限ループでCPU高負荷

  • ページ: bugtrack
  • 投稿者: ばびぶべぼん
  • 優先順位: 緊急
  • 状態: 完了
  • カテゴリー: バグ
  • 投稿日: 2009/11/02 (月) 15:22:23
  • バージョン: 0.11β , 0.11 , 0.12テスト版

メッセージ

起動するとCPUが高負荷になります。
(ソースは、なでしこプログラム板のを拝見しています)
原因はステータスバーの時刻表示を更新する処理のようです。
「オンの間」のループですが、waitを入れていないため発生します。
「秒待つ」を入れるか、タイマー部品を使った方が良いと思います。

もし、よかったら開発の方お手伝いしましょうか?

詳細情報

  • 発生するバージョンはv0.11β以降で発生。
    0.10a以前ではステータスバー時計表示が無いため発生しない。

解決策

  • 問題個所↓
    オンの間
      下バーは今。
      今を「:」で区切って時間配列に代入。
      時=INT(時間配列¥0)
      分=INT(時間配列¥1)
      秒=INT(時間配列¥2)
      続ける。
    
  • 改良案↓
    オンの間
      下バーは今。
      1秒待つ。
      続ける。
    

こうすると1秒間隔で更新することになり、負荷が減る。
問題点:最大1秒の誤差が生じる。(許容範囲と思いますが…)
あと、時間配列に代入するところですが利用している所がないので不要では?

  • 改良案2↓
    時計更新とはタイマー
    その間隔は1
    その時満ちた時は〜下バーは今
    その開始
    

こちらはタイマー部品を使ってます。
プログラムの都合上、こちらの方が良いと思われます。
これも1秒間隔ですので誤差が最大1秒生じます。
どうしても正確さを求めるのであれば、間隔の値を小さくします。
でも、あまりにも小さすぎると負荷が大きくなりますので...



  • わかりましたまっててください -- k.k
  • 上のコメントに追記 開発を手伝ってもらってもいいですが、なでしこページにあるソースは古い(今はv0.12テスト版)ので個人ページの方にメールアドレスを書いていただければ幸いです(ソースを添付するので) -- k.k
  • 了解です。 -- ばびぶべぼん
  • v0.12テスト版でも同じ現象を確認 -- ばびぶべぼん
  • じゃあ古いv0.09以前はどうでしょうか -- k.k
  • こちらの問題が解決しなかったら過去ログwikiにおきます -- k.k
  • 確認してみます。 -- ばびぶべぼん
  • v0.09b以前ではステータスバーに時計がないため発生しないですね。 -- ばびぶべぼん
  • 詳細をまとめておきました。 -- ばびぶべぼん
  • 改良案2を適用することにします -- k.k
  • 分かりました。 -- ばびぶべぼん
  • v0.12テスト版2にて修正されたことを確認しました。 -- ばびぶべぼん
名前:
コメント: