C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

Re[6]: 待ち時間について


(過去ログ 75 を表示中)

[トピック内 8 記事 (1 - 8 表示)]  << 0 >>

■44503 / inTopicNo.1)  待ち時間について
  
□投稿者/ hpp (1回)-(2009/12/10(Thu) 13:59:40)
hpp さんの Web サイト

分類:[.NET 全般] 


プログラムの待ち時間で1ms待ってから実行というプログラムをつくりたいのですが

System.Threading.Thread.Sleep(1)

では1msまで短くできないみたいなです。(オシロスコープで確認しました)

何か解決策はないでしょうか?

vb2003を使っていて、OSはxpです。
引用返信 編集キー/
■44505 / inTopicNo.2)  Re[1]: 待ち時間について
□投稿者/ オショウ (455回)-(2009/12/10(Thu) 14:26:58)
No44503 (hpp さん) に返信
> プログラムの待ち時間で1ms待ってから実行というプログラムをつくりたいのですが
> System.Threading.Thread.Sleep(1)
> では1msまで短くできないみたいなです。(オシロスコープで確認しました)
> 何か解決策はないでしょうか?
> vb2003を使っていて、OSはxpです。

  無理です。
  .NET的かどうか解りませんが、指定した時間分、かなり正確にSleep
  してくれるのは、100msです。が、これも100%ではありません。

  どういう理由で確実に1ms待ちたいのですか?
  どうもハード的(FA的)な要素が見えますが・・・

  I/Oボードにハードウェアタイマーが載っていたりしますので、
  割り込み使うとかしないと精度は出ません。
  ただ、C++寄りの話で、VB/C#では、直接ハードウェアの割り込みや
  コールバックを受けれないので、C++ CLIで、仲立ちコードを書いて
  やらねばなりません。

※ DOSやWin16のころは、どこかのI/Oポートにアクセスしたら、例えば
  100ns待つことになる・・・みたいな仕様があったのですが、Win32
  からはプロテクトモードなので、そういうことはできなくなりまし
  たネ!・・・

以上。参考まで
引用返信 編集キー/
■44507 / inTopicNo.3)  Re[2]: 待ち時間について
□投稿者/ hpp (2回)-(2009/12/10(Thu) 14:36:34)
hpp さんの Web サイト
No44505 (オショウ さん) に返信

1kHzでI/O制御をしようと思っています。

残念ですが機能的に不可能なのですね?
引用返信 編集キー/
■44509 / inTopicNo.4)  Re[3]: 待ち時間について
□投稿者/ オショウ (456回)-(2009/12/10(Thu) 15:15:22)
No44507 (hpp さん) に返信
> 1kHzでI/O制御をしようと思っています。
> 残念ですが機能的に不可能なのですね?

  デバイスドライバーレベルに引きあがれば、1KHzも
  可能だと思いますが・・・

  結果的には、VB/C#でアプリレベルでは無理です。

● 1KHzの割り込みを安定して受け取れる仕掛けがある
  ならば、可能にはなります。

  試す価値はありますが、有償商品を入手する以外には
  相当する機能を自作しないといけないので、自作でき
  るなら、こういう話にはならないかと。

  WinDriverと言うものがあります。
  http://www.xlsoft.co.jp/jp/products/windriver/products.html

以上。参考まで
引用返信 編集キー/
■44510 / inTopicNo.5)  Re[4]: 待ち時間について
□投稿者/ オショウ (457回)-(2009/12/10(Thu) 15:25:23)
追伸・・・

システムタイマーの空きを使って1KHzで割り込み発生させれば
やりたいことは限りなくできると思いますが、C++でないと無
理だと思います。

.NET使うとコードのオーバーヘッドも多く、レスポンス
が悪くなるので、1ms応答が厳しくなるからです。

ただ、C++ CLIで、タイマー割り込みのコールバックを受けれる
ようにして、イベントを発生させれば、とりあえずは1msのイベ
ントが手に入ります。

ただ、そのイベントを受けるまでにどの程度遅延し、その結果
の処理後までの処理にかかる時間、1ms以内に返すことができるか・・・

チャレンジしてみるのは面白いと思いますが・・・
やっぱC++できないことには。と言うところです。

逃げ手と言うか、擬似的な対処としては、いろいろあちこちに
書き込みがあります・・・

マルチスレッドにして、擬似無限ループ作って、高精度マルチメディア
タイマー使って、1msの経過時間を監視しつつ、1msを超えたタイミング
で、処理を行う・・・

ただ、しくじると、CPUの負荷を限りなく食ってしまいますので・・・

以上。
引用返信 編集キー/
■44511 / inTopicNo.6)  Re[5]: 待ち時間について
□投稿者/ hpp (3回)-(2009/12/10(Thu) 16:17:00)
hpp さんの Web サイト
2009/12/10(Thu) 16:18:01 編集(投稿者)
2009/12/10(Thu) 16:17:55 編集(投稿者)

No44510 (オショウ さん) に返信

back ground worker というものを使えばいけそう・・・

みたいな感じで書いてあるのですが・・・

http://rucio.groupsite.jp/commu/ThreadDetail.aspx?ThreadId=9442

もしかしたらいけますかね?

もしvb2008でやるとして新しくコンポーネント?を追加する方法教えてもらえませんか?

vb2003ではコントロール一覧から選択したような・・・
引用返信 編集キー/
■44512 / inTopicNo.7)  Re[5]: 待ち時間について
□投稿者/ 774RR (439回)-(2009/12/10(Thu) 16:24:57)
マイコン (H8) ですら、他にいろんな割り込み処理等をしている状況では
ソフトウェアで 1KHz を作ってブザーを鳴らせたらてきめんに音が濁って聞こえる
=さまざまな遅延によってソフトウェアだけでは正確に 1KHz が出せない
というのは経験済。

どの程度の精度が必要なのかわからないけど
オシロスコープで測るくらいだから、それなりに正確な波形が出したいのであれば
Windows (のアプリケーションソフトのレベルで) は不可能と考えるべきだと思う。
デバイスドライバが組めても、結果的に精度が出なきゃ無駄な努力に終わるだけなので
方針転換したほうがいいと思う。

シリアルポートの TxD 信号に(たまたま)ほぼ 1KHz の方形波に見えるような
bitrate/parity/stop なビットパターンを WriteFile し続けるとか (もし可能なら)
引用返信 編集キー/
■44514 / inTopicNo.8)  Re[6]: 待ち時間について
□投稿者/ ヴァン (45回)-(2009/12/10(Thu) 17:51:31)
No44511 (hpp さん) に返信
> 2009/12/10(Thu) 16:18:01 編集(投稿者)
> 2009/12/10(Thu) 16:17:55 編集(投稿者)
>
> ■No44510 (オショウ さん) に返信
>
> back ground worker というものを使えばいけそう・・・
>
> みたいな感じで書いてあるのですが・・・
>
> http://rucio.groupsite.jp/commu/ThreadDetail.aspx?ThreadId=9442
>
> もしかしたらいけますかね?
>
> もしvb2008でやるとして新しくコンポーネント?を追加する方法教えてもらえませんか?
>
> vb2003ではコントロール一覧から選択したような・・・

これは重い処理を別スレッドで動作させる仕組みであって、精度の良いタイマーを作る仕組みじゃない。

1Hzのクロックは発振子から生成するようにして、そのオンオフをVBのソフトで制御した方が楽でしょう。

引用返信 編集キー/


トピック内ページ移動 / << 0 >>

このトピックに書きこむ

過去ログには書き込み不可

管理者用

- Child Tree -