デバッグモード切り替えでrecvlnが無限待ちとなる
Eröffnet am: 2016-03-18 14:49
Letztes Update: 2016-04-10 17:52
Auswertung: | hata-k | Verantwortlicher: | (Keine) |
---|---|---|---|
Priorität: | 5 - Mittel | Meilenstein: | (Keine) |
Typ: | Fehler | Schweregrad: | 7 |
Komponente: | Tera Term Macro | Status: | Offen |
Lösung | Keine |
Einzelheiten
【環境】 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)と 受信データのリンクが切れている印象である。
Letzte Aktualisierung für dieses Ticket
2016-04-10 17:52 Aktualisiert von: yutakapon
- Priorität Update from 7 to 5 - Mittel