Windows Tcl 8.5 응용 프로그램에서 Ctrl-C를 가로채는 데 문제가 있습니다. 내가 개발 한 확장 라이브러리에 콘솔 처리기를 추가했지만 항상 작동하지는 않습니다.Windows 콘솔의 Tcl 및 Ctrl-C
일부 Tcl 코드가 실행 중이면 모든 것이 정상입니다. 그러나 응용 프로그램이 사용자 입력을 기다리고 있으면 Ctrl-C를 눌러 종료합니다. 내 처리기가 호출되지만 동시에 (다른 스레드에서) Tcl REPL은 Tcl_Exit
을 호출합니다. 이것은 모든 것을 정말로 엉망으로 만듭니다.
내가 알 수있는 한 REPL은 에 EOF
이 발생했다고 잘못 생각하기 때문에 Tcl_Exit
이 호출됩니다. 이것은 Ctrl-C를 누를 때 읽기 루틴이 리턴되고 읽은 바이트 수 (0)를 리턴한다는 결과입니다. REPL은이 조건을 EOF로 해석합니다.
이 문제를 쉽게 해결할 수 있습니까? Tcl 빌트인 채널을 버리고 나만의 채널을 제공 할 수는 있지만,이 간단한 문제는 과도한 것으로 보인다.
나는 twapi::set_console_control_handler
을 시도했지만 전혀 작동하지 않는 것 같습니다. Ctrl-C를 누르면 항상 응용 프로그램이 종료되고 핸들러는 호출되지 않습니다.
빠른 critcl 빌드 확장을 시도하여 SetConsoleCtrlHandler를 호출하고 동일한 효과를 얻습니다. 핸들러 함수가 호출되었지만 tclsh가 종료됩니다. 나는 twapi 버전에서 스크립트를 실행하기위한 이벤트를 발생시키고 이벤트가 처리되기 전에 종료되므로 스크립트를 호출하지 못한다고 생각합니다. 아마도 C 핸들러가 호출 될 것입니다. – patthoyts