2011-07-05 14 views
0

ファームウェアの一部をC#で書かれたguiに移植しています。私はそれを見つけたファームウェア_nop()in c#

nop() 

は実際に何もせず何クロックサイクルも実行を遅らせる機能です。

nop()を使用すると、ファームウェアの実行が2ミリ秒遅れます。どのように私はCで物事を遅延させるのですか?以上の数ミリ秒のためのあなたのGUIのメインスレッドをブロックすることは一般的に悪い考えであることを事前に

おかげで、

+0

.NET GUIアプリケーションは、ファームウェアと同じではありません。ファームウェアにnop()の理由がある場合、必ずしも.NET GUIアプリケーションにその理由があるとは限りません。 nop()コールが必要かどうかを確認し、必要でない場合はスキップします。 – dtb

+0

ありがとうございます。 System.Threading.Thread.Sleep(ミリ秒)を使用して終了しました。ロードする必要のあるGUIに関連する他の遅延があるためです。非常に大きな遅延(マイクロ秒と比較してミリ秒)を使用すると、GUI開発の必要性に合っています。 – Vikyboss

+0

GUIプログラミングをしているなら、おそらくどんな種類の遅延もしないでください。その代わりに、非同期プログラミングパターンを使用して、休憩/休憩の代わりに作業を終了し、その状態を通知します。 – Alan

答えて

4

System.Threading.Thread.Sleep(milliseconds);

注意。その間にイベント処理が行われるようにするには、数ミリ秒後に起きるタイマーを使用する方が良いかもしれません。また、I/Oを実行する前に一時停止したい場合は、代わりに非同期I/Oを使用することを検討してください。

また、Windowsと.NETのどちらもリアルタイム保証を提供していません。 Thread.Sleep(2)への呼び出しは少なくとも2ミリ秒間中断されますが、そのスレッドはそれを超える数ミリ秒間実行を再開しません。

+0

ありがとう私はスリープ機能を使用して終了しました。 – Vikyboss

0

Thread.Sleep。例えば

Thread.Sleep(2);

あなたはexatly 2msのを取得しない場合がありますので、Windowsは、しかし、周りに15ミリ秒の最小分解能を持っていることに注意してください。詳細情報については、参照What is the impact of Thread.Sleep(1) in C#?

2
Thread.Sleep(1000); 

は、1秒の現在の実行をスリープします。

0

厳密なタイミングが必要な場合は、穀物に反対して、と言うだろう、Thread.Sleep isn't a good idea

代わりにSystem.Timersタイマーで手動/自動リセットイベントを使用することをお勧めします。

+0

精度が必要なときはタイマーを使う必要があります。 – Vikyboss