いつもお世話になっております。
表題の件につきまして、ご教示ください。
【処理内容】
メインフォームのボタンからポートをオープンし、
受信データ(1Byte)をテキストボックスに表示し続ける。
※受信データは定期受信
通信をやめたいときにメインフォームのボタンから
ポートをクローズする。
上記、クローズ時に、ほぼフリーズします。
原因はシリアル通信の受信イベントが別スレッドにて処理されているため、
Invoke()にてテキストボックスの更新をしており、
これが悪さをしているみたいです。
BeginInvoke()を使用するとフリーズは回避することができるのですが、
テキストボックスに表示される受信データの内容が激しく欠落してしまいます。
Invoke()を使いつつ、フリーズを回避する方法はないのでしょうか。
無知で大変申し訳ございませんが、よろしくお願いいたします。
A 回答 (1件)
- 最新から表示
- 回答順に表示
No.1
- 回答日時:
この方法が最善とは思いません 一例として
>クローズ時に、ほぼフリーズします。
フリーズとはPCが固まるフリーズではなくて
アプリがエラー出してすっ飛ぶんですよね(多分)
それとも飛びもせずプロセス残ったまま反応しなくなるのでしょうか?
以下は すっ飛んでるんだろうと仮定して書いています
メイン(ボタン)処理で
・クローズ前に スレッドに対して終了要求フラグを立てる
・スレッドが終了するまで待つ(フラグでもシグナルでも確認はいくつか考えられます)
・ポートクローズ処理を行う
・スレッドでは終了フラグを監視して動作(現状多分ポーリングループしてるんでしょう)
するように変更する
・スレッド終了フラグを立てる
といった形でいいのでは?
もしくは実質のオープン・クロース処理自体をスレッド内に記載してもいいかと
メイン側処理とスレッド側処理で同期取れればどんな形でもいいかと思います
同期が取れてないからタイミングによってクローズ後にデータ読みに行って
アプリがすっ飛ぶということではないかと思います
テキストボックスの更新自体が問題の本質ではないと思いますよ
(データ読みに行って更新されるからこそ表示してるんでは?)
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) ユーザーフォーム「frm_基本❶」を立ち上げると新規で入力する行数を右下のNoとして表示しています。 1 2023/03/16 19:02
- docomo(ドコモ) +メッセージの送受信。 au(uq mobile)のデータ回線でdocomoの電話番号の+メッセージ 2 2022/09/14 16:09
- Access(アクセス) Dlookupにエラーがでてしまう 1 2022/10/31 14:35
- その他(パソコン・スマホ・電化製品) アプリを開いたときに「通信に失敗しました 通信状態の良いところで 再度お試しください」と表示される 6 2022/09/20 10:19
- iCloud iPhone端末変更時のLINE引継ぎ 4 2023/07/09 15:07
- Visual Basic(VBA) ExcelVBAの複数指定範囲の構文 2 2022/05/26 22:39
- HTML・CSS htmlで画面遷移させたい 1 2022/10/28 18:19
- iPhone(アイフォーン) iPhoneのデータ通信、SIMカードについて質問です。 海外で使うためにSIMカードを変えたのです 2 2022/05/14 00:10
- モニター・ディスプレイ windows10 モニタに表示されなくなった 2 2023/08/04 16:58
- Access(アクセス) Access 登録ボタンからサブフォームの更新 1 2022/07/22 10:23
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
スレッドにて同一メモリの書き...
-
WaitForSingleObjectの使い方に...
-
マルチスレッドプログラミング...
-
VC++スレッドの正しい終了のさ...
-
gprofとスレッドについて
-
スレッドの終了はどうやるんで...
-
マルチスレッドでブレイクポイ...
-
Windows上で、シグナル(SIGTERM...
-
C# スレッドから親ウィンドウへ...
-
VC++ スレッドからDoModalへ
-
VB2005 シリアル通信のClose処理
-
Macターミナルで実行中のプログ...
-
バックグラウンドのプロセスの...
-
C言語で、メモリを解放しないで...
-
Webプログラムってネイティブア...
-
TCP/IP通信時のサーバーからの受信
-
メッセージボックスのボタン名変更
-
explorer.exeが異様にメモリを食う
-
ソケットのクローズについて
-
PLCとPCの通信
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
WaitForSingleObjectの使い方に...
-
スレッドの安全な終了のさせ方
-
VC++スレッドの正しい終了のさ...
-
スレッドの監視方法について
-
スレッドの終了はどうやるんで...
-
スレッドにて同一メモリの書き...
-
Windows上で、シグナル(SIGTERM...
-
別スレッドのデータを受信できない
-
VB2005 シリアル通信のClose処理
-
複数スレッドを動作させるのに...
-
マルチスレッドプログラミング...
-
MFC通信プログラムマルチスレッ...
-
マルチスレッドの実行順序の制御
-
スレッドの終了の仕方
-
msec単位のWait Timerが作れない!
-
マルチスレッド内のループについて
-
C++でマルチスレッド処理をさせ...
-
待機関数(WaitForMultipleObjec...
-
メモリアクセスの競合について
-
同一スレッドで、ロックをかけ...
おすすめ情報