はじめまして
BCB6proを使用していて開発歴1ヶ月のど素人です。
現在USBデバイスの制御を行っていまして、問題は実行して
何秒か立つとフリーズしてしまうというものです。
その何秒かというのはほとんどランダムです。10回に1回ぐらいは問題なく走ってくれます。
OnTimerで勝手にinterval==10ごとにUSBデバイスにデータを書き込み、さらにTCP/IPで送信もするというプログラムです。
そもそもBuilderでの無限ループの作り方がわかってないような気がします。OnTimerを使う以外にいい方法があるのでしょうか?
VC++のようにwhile等を入れたら、それまたフリーズしてしまいました。質問がわかりづらくてごめんなさい。
ご教示願います。
A 回答 (4件)
- 最新から表示
- 回答順に表示
No.1
- 回答日時:
whileでbreakできなければCPU負担率MAXでLOOPしてしまいます。
(フリーズ状態)強制終了するか、ウインドウズメッセージをどうにかして
割り込ませないと止まりません。
BCBは使ったことありませんが、
OnTimerを使うのは正しいと思います。
おそらくフリーズするのはどっかで
whileやfor文の無限ループに陥っているのでは
ないかと思います。
(ところで10ms毎に動作させたいとして
それを無限ループとは普通言わないのでは?
一般的に無限ループは脱出不可能なバグをさすと思います。)
>VC++のようにwhile等を入れたら
VC++でもwhile文は普通使いません。(マルチスレッドならokですが)
SetTimer,MFCならOnTimer等を使います。
# あとOSのバージョンも書いたほうが良いかと。
No.2
- 回答日時:
whileであろうが、forであろうが、たとえgotoであっても「計画され無限ループ」はフリーズではありません。
> BCB6pro
ということは、Microsoft Windows2000Pro以上のOSですね。OSは何ですか?
VCLアプリですか?MFCアプリですか?コンソールアプリですか?
コンポーネントは何を使っていますか?
> OnTimerで勝手にinterval==10ごとにUSBデバイスにデータを書き込み、
> さらにTCP/IPで送信もするというプログラムです。
タイマー割り込みはちゃんと起こってますか?
OnTimerを呼び出した方の(割り込み処理でない方)プログラムは何をしているのですか?
TCP/IPの制御は何を使っていますか?どんな手順ですか?
USBデバイスのアクセスは何を使っていますか?どんな手順ですか?
割り込み処理でない方が、イベントループに制御を戻してやらなければ画面はフリーズするでしょう。
デバッガで追いかけてみましたか?
マルチスレッドに出来ませんか?
この回答への補足
回答ありがとうございます.OSはWindowsXproです.
BCBを使っている限りVCLアプリになるものかと思っているのですがこれは間違いなのでしょうか?使っているコンポーネントはボタンコンポーネント,メモコンポーネント,タイマー,通信コンポーネントです.このTCP/IP制御を行っている通信コンポーネントですが,VectorでダウンロードしたTMan2TManというソフトでDirectPlayをラッピングしたものだそうです.正直仕組みはわかっていません....
普段は何も処理していなくて,あるボタンを押すとOnTimerがTrueになってUSBデバイスとのデータの送受信を繰り返すという単純なプログラムです.USBドライバーは汎用(http://www.otto.to/~kasiwano/ )のものをダウンロードして使っています.OnTimerを呼び出しているほうは問題ないと思います.Intervalを200ぐらいにしたら問題なく動くのですが...
マルチスレッドという言葉は聞いたことがあるのですがBCBでやる方法をよくわかっていませんので少し勉強して今から試してみます.
No.3
- 回答日時:
こんにちは。
USBデバイスへの書き込みは行われています?それが止まっていませんか?もしくは、TCP/IPのところで。
一度USBデバイスへの書き込み、TCP/IPの通信を何も行わない、空の関数に変え、正しく割り込みが行われているか確認してみてください。(デバッグの基本です)
それから、リソースの解放はちゃんとやっていますか?openだけしてcloseしていないとか、取得して解放していないとか、通信関係で『デッドロック』が発生している可能性も否定できないのではないでしょうか。
BCBが素人でも、VCでそれなりに経験があるなら、根本の部分は同じです。経験は生かしてください。
No.4
- 回答日時:
ちょっと気になったんですが、
> Intervalを200ぐらいにしたら問題なく動くのですが
USBドライバのタイムアウトと競合してませんか?
USBデバイスアクセスの部分をDummyのスタブに変えてテストしてみてください。
Ontimerのintervalは10で。
USBドライバのタイムアウト処理と競合しているならUSBドライバを別の物に変えるか、改造するか、Ontimerを辞めるしかないでしょう。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Windows 10 Chrome OS Flexのインストールメディアが作成できないです... 1 2022/07/20 20:47
- その他(パソコン・スマホ・電化製品) PCに詳しい方に、質問です。 使用しているのは、TOSHIBAのPCで、多分なんですけど、アップデー 4 2023/01/28 03:30
- 格安スマホ・SIMフリースマホ E-SIM電話番号不明表示 1 2023/07/23 19:48
- docomo(ドコモ) SIMロック、またはSIMロック解除の仕組みをおしえてください。 5 2022/04/25 10:57
- デスクトップパソコン pcが1日に3-4回ほどフリーズするようになりました。 ゲームのプレイや特定のサイト(Twitchな 1 2023/06/16 04:25
- UNIX・Linux LinuxMintが突然フリーズする 3 2022/05/26 09:30
- ブルーレイ・プレーヤー・レコーダー POWER DVDをアンインストールしてMicrosoft 純正のDVDプレイヤーをインストール。 3 2022/07/02 20:53
- その他(OS) MAC VirtualBoxにインストールしたWindows11がフリーズする 1 2023/03/14 16:31
- デスクトップパソコン ノートンが爆弾を残しているのか、Windowsディフェンダーが重いのかどっちなのでしょうか? 5 2023/05/06 12:01
- C言語・C++・C# TCP/IP通信時のサーバーからの受信 2 2022/11/23 09:11
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
sleep関数の原理について
-
ショッピング
-
(H8マイコン)タイマ割込で変更...
-
Z80の割り込みについて
-
PICのPIN変化割り込みに...
-
実行した後、どうしてもフリー...
-
pic 複数の割り込み関数 切り分...
-
USJでの割り込み
-
USB機器からのデータ受信による...
-
電車で待機列の割り込みについ...
-
irqbalance って
-
緯度、経度の 10進法と 60進法...
-
Macターミナルで実行中のプログ...
-
VBAの配列サイズとメモリに関して
-
スレッドの安全な終了のさせ方
-
バックグラウンドのプロセスの...
-
Excelでのセル内容の高速消去方法
-
explorer.exeが異様にメモリを食う
-
C言語で、メモリを解放しないで...
-
VBSで応答不要のメッセージボッ...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
インバウンドで迷惑している人...
-
pic 複数の割り込み関数 切り分...
-
スーパーのレジで並んでいたら...
-
ショッピング
-
Excelでタイマーの一時停止する...
-
電車で待機列の割り込みについ...
-
【組込み】割り込み中のstatic...
-
C言語でPICマイコン開発
-
CPUの処理量を減らすコーデ...
-
Amazonfireタブレットにわから...
-
マイコン C言語 割り込み処理...
-
USB機器からのデータ受信による...
-
一定時間操作がなかったら、と...
-
VB.net 割り込みの禁止
-
ウォッチドッグタイマ(WDT)の...
-
電車乗車時、並んでいるのに割...
-
USJでの割り込み
-
VB6でSendKeyを利用したTab移動...
-
PICでのプログラムによるチャタ...
-
H8マイコンで割り込みが任意の...
おすすめ情報