- ベストアンサー
[VC++6.0]他のソフト動作時のエラー
VC++6.0にてRS-232Cポートを利用した端末機との通信プログラムを作成しています。 このプログラムは、通常では問題ないのですが他のソフトを起動させることや、他のソフトで処理(重い処理の場合は顕著にでます)を行うと通信エラーが発生し、正常終了できません。 原因としては、他のソフトなどの処理の際に232Cポートからの応答信号が認識できていないため、エラーが発生しているような気がします。 Cプログラムはまだ初心者のため、この回避方法がわかりません。もしかすると単純な命令で回避できるのかもしれないのですが、わかる方がいれば教えてください。 ちなみに、開発環境はVC++6.0EnterPrise Edition、Win2000SP4(CPU=C-1.7G、MEM=512MB)です。 CPUの速度やメモリの容量により多少差はあるかも知れませんが上記ソフトをWinXPSP2のCPU=P4-3GHz、メモリ=1GBで実行してもメモ帳ソフトを起動しただけでエラーになる場合があります。 わからない点などありましたら補足しますので、よろしくお願いします。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
原因が推測どおりであるとするなら、 Windows は、リアルタイム処理には向かない OS なので、 そういうものだと思った方がよいかもしれません。 根本的に解決するには、通信の時間制約自体を改良するか、 専用のドライバを書くべきかと思います。 【警告】 以下の対策は、場当たり的に回避策であり、 不用意に実施すると PC が処理を受け付けなくなる等の 危険性が予測されます。十分に処理を検討してください。 場当たり対応としては、SetPriorityClass で当該処理の 優先度を引き上げれば、改善されるかもしれません。 (完全に解消されるとは限りません)
その他の回答 (1)
- SpiralGalaxy
- ベストアンサー率39% (649/1653)
シリアル通信をハードフロー制御に設定すればよいのでは? もちろんケーブルもハードフローの結線がちゃんとなされたものを用います。
お礼
回答ありがとうございます。 ハードフロー制御は端末側が対応していない(結線されていない)ものを使用するため、できませんでした。 でも今後の参考になりました。
お礼
今回の通信は、通信する信号が少なく処理が数十ミリsecで終了するものでしたので、その通信中だけ回答にあった優先度をあげる処理を実行して、正常に動作できるようになりました。 優先度を上げる時間が少ないこともあってか、他への影響も今のところなさそうです。 助かりました。ありがとうございます。