Ticket #36167

デバッグモード切り替えでrecvlnが無限待ちとなる

오픈 날짜: 2016-03-18 14:49 마지막 업데이트: 2016-04-10 17:52

Reporter:
소유자:
(None)
Type:
Status:
Open
Component:
MileStone:
(None)
Priority:
5 - Medium
Severity:
7
Resolution:
None
File:
None
Vote
Score: 0
No votes
0.0% (0/0)
0.0% (0/0)

Details

【環境】 TeraTerm4.90 on Win7(64bit)

【やりたいこと】 ターミナル画面にCOMポートからの受信文字は表示せず、 マクロで加工した文字だけを表示する。 受信行の取りこぼしは許容する。

【実現方法】 dispstrで表示する文字列の手前に#$1B"[u"#$1B"[17m"、 後ろに#$1B"[8m"を連結し、画面固定位置にdispstr 受信文字とカーソルが見えない状態にしようとしたが エスケープシーケンスがESC[uしか動作しなかった。

他のターミナル画面に受信文字表示しない方法は 「setdebug 3」しか思いつかなかった。 しかし、そのモードではdispstrも行えなかった。 そのため、マクロがdispstrする時だけ「setdebug 0」 表示後に「setdebug 3」に戻す。

【実現補足】 上記実現方法だけではデバッグモードの切り替えた際に 送り続けられている受信文字も表示されてしまう。 これを抑制するには、ソフトフローが有効であれば、 XOFF送信後、相手の送信停止を待ってから「setdebug 0」し、 「setdebug 3」後にXON送信する。 ソフトフローが使えないなら、マクロのdispstr前に disconnectし、flushrecvで受信バッファをクリア、 「setdebug 3」後に「connect '/C=3'」する。

【不具合事項】 現状では通信相手がXOFFを受け付ける機能が未実装のため、 接続と切断を用いる実装方法で確認した。

受信はwhile無限ループでrecvln(またはwaitregex)する。 (inputstrを加工してdispstrするだけのマクロ)

以上の処理において、通信相手からは一定間隔でデータ送信が 続いているにも関わらず、何行かのデータを加工表示した後に、 recvln(またはwaitregex)が無限待ち状態に陥る。

一旦この状況に陥ると、マクロを停止して再実行しても 無限待ち状態のまま復帰しない。 timeout=1のように設定しても無限待ちから脱せない。

復帰するには、「setdebug 0」だけのプログラムを実行して、 通信相手からのデータがターミナル画面にスクロール表示されて いる状態にしてから、加工表示マクロを実行する必要がある。

一定確率で、デバッグモード切り替え時に 「setdebug 3」時にrecvln(またはwaitregex)と 受信データのリンクが切れている印象である。

Ticket History (2/2 Histories)

2016-03-18 14:49 Updated by: hata-k
  • New Ticket "デバッグモード切り替えでrecvlnが無限待ちとなる" created
2016-04-10 17:52 Updated by: (del#24082)
  • Priority Update from 7 to 5 - Medium

Attachment File List

No attachments

Edit

You are not logged in. I you are not logged in, your comment will be treated as an anonymous post. » Login