
いつもお世話になっております。
表題の件につきまして、ご教示ください。
【処理内容】
メインフォームのボタンからポートをオープンし、
受信データ(1Byte)をテキストボックスに表示し続ける。
※受信データは定期受信
通信をやめたいときにメインフォームのボタンから
ポートをクローズする。
上記、クローズ時に、ほぼフリーズします。
原因はシリアル通信の受信イベントが別スレッドにて処理されているため、
Invoke()にてテキストボックスの更新をしており、
これが悪さをしているみたいです。
BeginInvoke()を使用するとフリーズは回避することができるのですが、
テキストボックスに表示される受信データの内容が激しく欠落してしまいます。
Invoke()を使いつつ、フリーズを回避する方法はないのでしょうか。
無知で大変申し訳ございませんが、よろしくお願いいたします。
A 回答 (1件)
- 最新から表示
- 回答順に表示
No.1
- 回答日時:
この方法が最善とは思いません 一例として
>クローズ時に、ほぼフリーズします。
フリーズとはPCが固まるフリーズではなくて
アプリがエラー出してすっ飛ぶんですよね(多分)
それとも飛びもせずプロセス残ったまま反応しなくなるのでしょうか?
以下は すっ飛んでるんだろうと仮定して書いています
メイン(ボタン)処理で
・クローズ前に スレッドに対して終了要求フラグを立てる
・スレッドが終了するまで待つ(フラグでもシグナルでも確認はいくつか考えられます)
・ポートクローズ処理を行う
・スレッドでは終了フラグを監視して動作(現状多分ポーリングループしてるんでしょう)
するように変更する
・スレッド終了フラグを立てる
といった形でいいのでは?
もしくは実質のオープン・クロース処理自体をスレッド内に記載してもいいかと
メイン側処理とスレッド側処理で同期取れればどんな形でもいいかと思います
同期が取れてないからタイミングによってクローズ後にデータ読みに行って
アプリがすっ飛ぶということではないかと思います
テキストボックスの更新自体が問題の本質ではないと思いますよ
(データ読みに行って更新されるからこそ表示してるんでは?)
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
スレッドにて同一メモリの書き...
-
WaitForSingleObjectの使い方に...
-
スレッドでWM_TIMERを受け取れない
-
スレッドの監視方法について
-
Macターミナルで実行中のプログ...
-
powershell を使いカレントディ...
-
バックグラウンドのプロセスの...
-
パソコンの演算速度について
-
エクセルVBA 大容量CSVファイル...
-
VBSの処理中一旦処理を止めて再...
-
【C言語】再帰が時間がかかる...
-
子プロセスの状態を親プロセス...
-
keycodeについて
-
sendkeysにてALT+CTRL+INSERTを...
-
マイコンからプログラムを読み...
-
スーパーのレジで並んでいたら...
-
逆コンパイルと逆アセンブルの...
-
プロセスIDからウィンドウハ...
-
フレームワーク「4.8.1」で、[S...
-
TCP/IP通信時のサーバーからの受信
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
WaitForSingleObjectの使い方に...
-
VC++スレッドの正しい終了のさ...
-
Windows上で、シグナル(SIGTERM...
-
スレッドにて同一メモリの書き...
-
.netアプリへのSendMessageでフ...
-
メインスレッドのPostMessageと...
-
スレッドの監視方法について
-
C# スレッド終了の監視について
-
_beginthreadexで生成したスレ...
-
別スレッドのデータを受信できない
-
別スレッドからメインダイアロ...
-
スレッドの安全な終了のさせ方
-
マルチスレッドのスレッド数を...
-
VB2005 シリアル通信のClose処理
-
スレッドの終了の仕方
-
pthread_cond_wait 取りこぼし?
-
マルチスレッドプログラム
-
Linuxでスレッド優先度って変え...
-
別スレッドとイベントの終了手...
-
Win32APIでのスレッド処理
おすすめ情報