我有一个在 Windows 8 机器上开发的 Tcl/Tk 应用程序。该应用程序使用 FTDI USB windows 驱动程序和 tclftd2xx tcl 扩展来打开 USB 设备。
作为测试的一部分,我将应用程序安装到 Windows 7 机器上。该应用程序运行良好,直到我尝试退出 tcl。当执行退出命令时,应用程序就会挂起。
我以为它与Tk有关,但事实并非如此。tcl 代码非常简单(loc 22 只是一个例子):
package require ftd2xx
set handle [ftd2xx open -location 22]
exit
这不是一个“好的”挂起——即使是程序 KILL 也不会关闭它。摆脱这种情况的唯一方法是对机器进行硬重置,因为 Windows 不会对活动进程进行“安全”关闭。
我确实发现调用 ftd2xx 重置会清除 tcl 正在等待的任何内容,并允许退出完成。
如:
package require ftd2xx
set handle [ftd2xx open -location 22]
ftd2xx reset $handle
exit
现在我的问题是,如果用户在关闭应用程序之前拔下 USB 设备,文件句柄 ($handle) 就会过时,因此 ftd2xx 重置无法释放挂起,我又要硬重启了。
我不知道错误是在我的初始化、libftd2xx.c、FTDI 驱动程序还是 Tcl 中。我不想发布所有 libftd2xx.c
如果有人对此有所了解,我将不胜感激。