TkCon GUIで機能の実行を途中で止めたい。たとえば、私はTkCon GUI上でコマンドとプロシージャを実行していますが、その場で停止させたい場合はどうしたらいいですか? linuxコンソールでは、 "ctrl + C"を使用します。それはTkConのGUIでは動作しません。tcl tkcon GUIで関数の実行を停止するにはどうしたらいいですか?
0
A
答えて
0
通常、できません。問題は、実行しているコードがGUIを実行しているコードと同じスレッドにあるため、プログラムが停止するように応答しないことです。 (またはCtrl + Cは、多くの場合、コピー・ツー・クリップボードとして、他の目的に使用される。)
しかし、あなたは別のスレッドでプログラムを実行し、そのスレッドへのハンドルを保持している場合、 cancel the execution(あなたはTcl 8.6を持っていると仮定します)。それは最も単純な形式だでは、この操作を行います。コードcatch
が強制取得し、エラーをESまで実行をほどくます
thread::cancel $threadID
を(コードが外部IOコールのようなもので停止されていないと仮定すると。 )catchのネストがループを再起動している場合は、-unwind
オプションも指定する必要があります。巻き戻すと、スレッドは明確に定義された状態に戻ります。
thread::cancel -unwind $threadID
TkCon GUIは、デフォルトでは、あなたのためにこの機能を提供していません。このを利用しての最も簡単な方法は、このような小さなマスター実行コンテキスト内でコードを実行することです:
package require Thread
set app_runner [thread::create { thread::wait }]
proc app_eval {args} {
global app_runner
thread::send -async $app_runner [concat {*}$args] app_result
}
# Simple receiver for async returns
trace add variable app_result write {apply {args {
global app_result
if {$app_result ne ""} {
puts $app_result
}
}}}
proc app_cancel {} {
global app_runner
thread::cancel $app_runner
}
# Bring the stack trace locally
proc app_handle_error {- info} {
puts stderr $info
}
thread::errorproc app_handle_error
また、バックグラウンドのエラーハンドラを設定する必要があるかもしれません。
私は上記をテストしてみた:
app_eval {
while 1 {puts -nonewline .;after 100}
}
app_cancel
、それがうまく働きました。これらの操作をGUIにバインドすることは、練習問題として残されています。
関連する問題
- 1. TCL実行のトレースがコンパイル関数で停止しないのはなぜですか?
- 2. Railsの実行をイニシャライザから停止するにはどうしたらいいですか?
- 3. キーボード入力でwhileループの実行を停止するにはどうしたらいいですか?
- 4. タイマーを停止するにはどうしたらいいですか?
- 5. スレッドを停止するにはどうしたらいいですか?
- 6. 関数またはメソッドはいつ実行を停止しますか?
- 7. pthread_joinでスレッドが停止するのを止めるにはどうしたらいいですか?
- 8. jQueryは他の関数の実行を停止しますか?
- 9. テストクラスの実行中にマネージトリガの実行を停止するにはどうすればよいですか?
- 10. Pythonでは、実行中の関数でコードをどのように停止しますか?
- 11. コールバック関数からの応答が得られるまで、実行フローを停止するにはどうすればよいですか?
- 12. javascript関数からPHPを実行するにはどうしたらいいですか?
- 13. スレッドを実行しているタスクが永久に停止するようにスレッドを停止するにはどうすればよいですか?
- 14. TCL:変数で実行するtclコマンド
- 15. jQuery setTimeout関数の実行を停止しない
- 16. Enter Frame firingを複数回停止するにはどうしたらいいですか?
- 17. 別のクラスからNotificationServiceを停止するにはどうしたらいいですか?
- 18. ターゲットを見つけたらスレッドを停止するにはどうしたらいいですか?
- 19. この.mouseenter関数を「停止」またはトグルするにはどうすればよいですか?
- 20. バッチスクリプトがコマンドライン(cmd)から開始/実行されたかどうかを確認する - または - 一時停止するか、一時停止しないか?
- 21. 実行中のsetInterval関数を一時停止しますか?
- 22. exec()の後に新しく実行されたプログラムの最初の命令で子プロセスを停止するにはどうしたらいいですか?
- 23. jqueryで親関数を停止するときにコールバックが停止されないようにしますか?
- 24. カウンタを30に再設定し、0で停止するにはどうしたらいいですか?
- 25. Windows phone 7でロジックを停止してアニメーションを実行するにはどうすればよいですか?
- 26. ユーザ入力のためにMonkeyrunnerを一時停止するにはどうしたらいいですか?
- 27. 一時停止したGoogle Appsアカウントでgoogle-apps-scriptの実行を停止するにはどうすればよいですか?
- 28. ドッカーコンテナを停止して同じコマンドで再実行するにはどうすればよいですか?
- 29. MavenがTESTを2回実行するのを止めるにはどうしたらいいですか?
- 30. ある関数から別の関数に変数を渡すにはどうしたらいいですか?
一般的なシェルでは、通常、実行中のコードはシェルとは別のプロセスで実行されるため、シェルを煩わせることなく割り込みが発生しやすくなります。 Tkcon *は他のプロセスでコードを開始することを許可しますが、通常は同じプロセスで実行します。 –
Ctrl + CはGUIで「コピー」することがよくあります... –