Ticket #36167

Open Date: 2016-03-18 14:49

Last Update: 2016-04-10 17:52

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

Reporter:hata-kOwner:(None)
Priority:5 - MediumMileStone:(None)
Type:BugsSeverity:7
Component:Tera Term MacroStatus:Open
ResolutionNone

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)と 受信データのリンクが切れている印象である。

Attachment File

Attachment File ListNo attachments
Add New attachment
Add attachment filesPlease login to add new attachment

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: yutakapon

  • Priority Update from 7 to 5 - Medium

Add Comment/Update #36167 (デバッグモード切り替えでrecvlnが無限待ちとなる)

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