TC官方合作论坛

标题: 关于"辅助.命令"执行被调用程序,需要等待被调用者执行结束的建议 [打印本页]

作者: cxkice    时间: 2012-9-2 09:23
标题: 关于"辅助.命令"执行被调用程序,需要等待被调用者执行结束的建议
辅助.命令()
       如果调用的是一个小程序(或脚本),在此程序(或脚本)未执行结束,主程序的控制流就到下一语句去了。比如以下举例,是需要使用到脚本执行后的结果的。但TC做不到等待脚本运行结束后再执行下一语句。
假设有一个被调用的脚本文件:c:\aaa.vbs, 代码如下:
       WScript.Sleep 25*1000                                                 ‘暂停25秒
       Set objShell = CreateObject("Wscript.Shell")
       objShell.run "cmd.exe  /c  ping  www.163.com  -w  0 > c:\jack.txt ", 0, True                     ’执行ping命令,也需要花上几秒钟时间才能执行结束

TC内的调用代码如下:
语句1          辅助.命令("c:\aaa.vbs", 假)                             //执行VBS脚本, 并将执行结果保留在:jack.txt中
语句2          string FileString = 文件.读文件("c:\jack.txt ")  //读取VBS脚本的执行结果:文件jack.txt的内容
   
这时,如果执行TC代码,问题就来了:执行<语句1>会调用并运行c:\aaa.vbs, 一运行此脚本,则TC控制流就立即执行<语句2>了。辅助.命令()并没有等待被调用程序执行结束的参数,带来应用范围的不适。没有办法,只得写个循环去判断文件大小来等待被调用程序aaa.vbs是否执行结束, 这增加了代码,相当麻烦。

建议能增加第三个开关参数:true/false, 来表示是否等待被调用程序执行结束。




作者: 孤烟    时间: 2012-9-3 12:43
可以试试这种方案
把 ”辅助.命令("c:\aaa.vbs", 假)        “ 这句丢到线程里面执行
然后执行 线程.无限等待  这个会返回线程是否处理完的信号
你试试
作者: cxkice    时间: 2012-9-12 22:48
这是个很好的建议.谢谢, 觉得应该可以的. 非常感谢TC小鸟, 实际测试及结果,我会在这儿写上的.




欢迎光临 TC官方合作论坛 (http://bbs.52tc.co/) Powered by Discuz! X3.1