Itcl / Tcom / Tcl / Threads:这个线程是否持续运行

时间:2017-02-20 14:07:19

标签: pthreads tcl itcl

在我编写过的地方,我把它写在一个杀死excel的线程中

method Kill_XL {} {
    thread::create {
        set rc [catch {exec taskkill /t /f /im Excel*} output]
    }
    sleep 5
}

之后,对于几个不同的愿望shell,以下命令调用Excel App但我可以看到它立即退出任务管理器

(shh..) 2 % ::tcom::ref createobject Excel.Application
::tcom::handle0x027CE918
(shh..) 3 % ::tcom::ref createobject Excel.Application
::tcom::handle0x027CE918

对于几个愿望shell(在关闭前一个愿望shell之后调用每个shell)重复上述操作。

在运行任何命令时,错误显示为:

"invalid command name ::tcom::handle0x027CE918"

但以下代码可以正常运行并打开Word应用程序

(shh..) 4 % ::tcom::ref createobject Word.Application
::tcom::handle0x027CE918

在等待很长时间(15-20分钟)后,我重新启动了wish shell并且能够运行(没有问题)以下代码:

(shh..) 8 % set x [::tcom::ref createobject Excel.Application]
::tcom::handle0x0272EB58
(shh..) 9 % $x Visible 1

此次杀死excel后出现了不同的错误消息

(shh..) 10 % thread::create {
                set rc [catch {exec taskkill /t /f /im Excel*} output]
            }
tid00004658


(shh..) 11 % $x Visible 0
0x800706ba {The RPC server is unavailable.}

然后重新开始:

(shh..) 20 %  ::tcom::ref createobject Excel.Application
::tcom::handle0x0272EB58
(shh..) 21 % 
(shh..) 21 % ::tcom::handle0x0272EB58 Visible 1
invalid command name "::tcom::handle0x0272EB58"

线程杀戮是否会导致问题 - 我总是睡5秒钟以确保杀人成功。

或者是tcom-Excel的其他(已知)问题?

此外,同时处理相同的应用程序

(shh..) 30 % foreach x  {. .} {puts [::tcom::ref createobject Excel.Application]}
::tcom::handle0x0272EB58
::tcom::handle0x0272EB58

对于未发布的tcom对象,这可能是一个清理问题 - 它是否会在杀死与之关联的Excel进程时自动清除?

1 个答案:

答案 0 :(得分:1)

这是操作系统的一些问题 - 在重新映像操作系统后不会重复。