同じコードなのに処理速度がキープできない。。。。

[戻る]
10秒チャージ8.7秒キープ。。。。 2002/07/13(土) 21:42:16
100mm/secタイマーで自分自身を呼び出して無限ループしているのですが、一定時間経つと速度
が落ちる事など、在り得るのでしょうか?

メモリー、リソース、クロック速度、共に安定している為、タイマー辺りに何かあるかも知れま
せん。
ハードコーディングすれども、タイマーを1mm/secに切り詰めようとも、余裕の表情なのです
が、決まった時間に遅くなってしまいます。

winXP(home)にVC++の組み込みシステムなのですが、夏バテ気味らしく、肉体疲労時の栄養補給
が必要で困っています。
過去ログでも聞きませんので、心当たりのある方お願いします。

wood 2002/07/13(土) 23:16:10
>一定時間経つ
どのくらいの単位

アプリケーションの起動後の時間
それともシステム起動後の時間
タスクマネージャでその時間に動作しているサービス、アプリケーション
などチェックしてますか

VCまたはC言語に関する質問なのでしょうか
どんなアプリの質問か良くわかりませんけど
コンソール、COM、ATL、ウィンドウ、ダイアログ
MFC使ってますかSDKですか

NT系のOSを使用するのは初めてですか

すべての質問に答えてください

? 2002/07/14(日) 00:38:45
使用上の注意は読みましたか?
この内容ではいくつの掲示板に書いても質問攻めにあうだけだと思いますヨ。
自分の環境では、一定時間たつとメール受信が走るため他のソフトのレスポンスが落ちることが
あります。
 m(__)m 関係ないっスよね。

wood 2002/07/14(日) 06:34:12
同じコードって何ですか
>一定時間経つと速度が落ちる事など、在り得るのでしょうか?
当然のごとくありえます
ただしMSDOSのようなシングル スレッド、シングル プロセスの場合
割り込みさえ発生させなければ、処理速度落ちませんけど

10秒チャージ8.7秒キープ 2002/07/18(木) 22:45:16
>どのくらいの単位
>アプリケーションの起動後の時間
>それともシステム起動後の時間
>タスクマネージャでその時間に動作しているサービス、アプリケーション
>などチェックしてますか
>同じコードって何ですか

簡単ですが、多少の演算と100mm/secタイマーです。
static void foo();
{
   i++;
   settimer(100, foo);
}
全般に当てはまるか判りませんが、この組み込みシステムでは
settimer100mm/secで87回、10mm/secで870回ほど
安定してループしているのだと思います。
システム起動後8.7秒ほどだと思います。

100mm/secウエイトかけてsettimerなしでループさせた所解決しました。
ただ本当にタイマーが必要になったとき今のままでは困るのですが。
あいかわらず原因が特定できません。

PATIO 2002/07/19(金) 10:31:11
ウインドウズのタイマーに精度を期待してはいけないと思いますよ。
ウインドウズのタイマーは他に忙しい作業が出来れば簡単に後回しに
されてしまう程度の代物ですから。
OS内部で何かが起これば、そこにCPUが持っていかれるでしょうし、
組み込みであれば、コンパクションスレッドの問題もあると思います。

時間の正確性が問題になるのであれば、ウインドウズのタイマーは使えないと
いうことになります。

不良PG [E-Mail] 2002/07/19(金) 11:36:36
ウインドウズのタイマーよりマナーを勉強した方がよろしいかと・・

マルチポスト
http://n76cd-01p05.ppp11.odn.ad.jp/cgi.cgi?05853

余談ですが・・、100mm/secって表記は、実際使われているのだろうか・・
速度の単位みたい・・

匿名希望 2002/07/19(金) 12:32:30
余談に回答ですが、
mm/sec(1秒間に?mm進む早さ)は間違い無く速度の単位ですね。
msec(ミリ秒 1/1000秒)と勘違いなされてるようです。

wood 2002/07/20(土) 05:02:54
>ただ本当にタイマーが必要になったとき今のままでは困るのですが
Windows OSに時間の正確性を求めるのは、無理があると思うのですが
ましてやXP(HOME)ですよ
OSの割り込みを軽減させたいのなら
同じXPでもPROを使うべきでしょう
ハードはCPUをデュアルで実装しMAXメモリ実装したもので
試すほか無いのではないですか
ここまでしてもだめだとは思いますけど

Joan 2002/07/20(土) 11:45:04
> static void foo();
> {
>    i++;
>    settimer(100, foo);
> }

settimer の使い方が妙な感じが・・・。引数に関数ポインタ?
Java Scrpit の settimer っぽい記述の仕方ですが・・。

うーん、タイマーってコンピュータに依存しますから同じ
コードなのに処理能力が違うのは当たり前では?

ゲーム機だって個体差があるのでタイマがみな微妙に違う
ので組み込みマシンも皆処理能力が同じと思ってはいけません。

あと XP の Home / pro じゃなくて Win9x/Me と 
WinNT/2000/XP の2グループかと・・。

PAI 2002/07/20(土) 15:47:42
正確さが必要ならメッセージループをPeekMessageにして、
CPU100%使って、自分で判定すればある程度は・・・

ありがとうです 2002/07/20(土) 23:22:47
[[解決]]
>ハードはCPUをデュアルで実装しMAXメモリ実装したもので
>試すほか無いのではないですか
>ここまでしてもだめだとは思いますけど

>ゲーム機だって個体差があるのでタイマがみな微妙に違う
>ので組み込みマシンも皆処理能力が同じと思ってはいけません。

>正確さが必要ならメッセージループをPeekMessageにして、
>CPU100%使って、自分で判定すればある程度は・・・

参考になる意見ありがとうございます。
こういう方法は思いつかなかったので試行錯誤してみます。
本当にお世話になりました。

古いスレッドには追加発言できません。