| ■68871 / ) |
Re[4]: WndProcの処理を止める方法 |
□投稿者/ しま (44回)-(2013/11/23(Sat) 09:39:38)
|
■No68865 (kota さん) に返信 > 回答ありがとうございます。 > > 工業用のPCにOSはXp(客指定)のOSでリアルタイムモニター > のような使い方をしています。 > PCIのGPIB、96IN/48OUTのI/Oボード、A/Dボード、3軸のモーター > コントロールボード、RS−232Cのティーチングペンダント > 計測用にマルチポイントシリアルRS-485が3本繋がっています。 > > GPIB、232C、I/O、A/Dボードはマルチスレッドタイマーで > 読み込んで、メインスレッドにチェンジイベントをあげ、 > RS-485は別ソフトがメッセージを投げてきます。 > > 自作のタイマーを含めタイマーは200個ほど使っています。 > 計測器などは非同期でも構わないのですが、モーターコントロールは > 同期が必要で、メインスレッドで処理しています。 > モーターの動きを監視し目的の場所に移動するまで、メインスレッドは > ループで待ちます。 > > 待っている間、測定器からのメッセージはSenndMessageで待たせます。 > ただしI/OからのStopコマンドは受け付ける為に、Doeventで処理を > します。 > この時、自分のWndProcのコールバックメソドに処理が入り込み、 > 抜け出さない(これは想像ですが)症状が起きます。 > 仕方なく現在は単にsleepを入れています。 > > そこで一時的にWndProcのコールバックを禁止する方法が無いものか > と質問しました。 > > 現在システムは殆ど完成していますがI/Oの読み込みが少し遅いために、 > コードを見直しています。 >
画面の処理がない、若しくは画面の制御が分離できるのであれば サービスとして動かすといいかもしれません ただ、Windows はリアルタイムOSではないので 100mS 以内に応答するといったことは必ずしも 望めないことはご存知のことと思います ですから、高速な応答が必要な場合はプロセスでもスレッドでも自分の処理が終わったらタイムスロットをOSに 返却(自分に割当たっているタイムスロットを独占しない)することが大切です
ところで、 > 自分のWndProcのコールバックメソドに処理が入り込み、抜け出さない
とありますが、 WndProc のコールバックとはなんのことでしょうか? 分類 .NET全般 とあったので貼り付けていたコードの記述言語は C# かと思っていましたが、 C/C++ なんですか?
開発環境、動作環境については書いてください。
|
|