Quantcast
Channel: All Open Tickets - Tera Term on OSDN
Viewing all articles
Browse latest Browse all 2128

デバッグモード切り替えでrecvlnが無限待ちとなる - Tera Term Ticket #36167 on OSDN

$
0
0

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

Eröffnet am: 2016-03-18 14:49

Letztes Update: 2016-04-10 17:52

Auswertung:hata-kVerantwortlicher:(Keine)
Priorität:5 - MittelMeilenstein:(Keine)
Typ:FehlerSchweregrad:7
Komponente:Tera Term MacroStatus:Offen
LösungKeine

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

Viewing all articles
Browse latest Browse all 2128