Private Declare Function OpenProcess Lib "kernel32" (ByVal dwDesiredAccess As Long, ByVal bInheritHandle As Long, ByVal dwProcessId As Long) As Long Private Declare Function GetExitCodeProcess Lib "kernel32" (ByVal hProcess As Long, lpExitCode As Long) As Long Private Declare Function CloseHandle Lib "kernel32" (ByVal hObject As Long) As Long Private Const PROCESS_QUERY_INFORMATION = &H400 Private Const STATUS_PENDING = &H103Private Sub RunShell(cmdline As String) Dim hProcess As Long Dim ProcessId As Long Dim ExitCode As Long ProcessId = Shell(cmdline, 1) hProcess = OpenProcess(PROCESS_QUERY_INFORMATION, False, ProcessId) Do Call GetExitCodeProcess(hProcess, ExitCode) DoEvents Loop While ExitCode = STATUS_PENDING Call CloseHandle(hProcess) End Sub用上面的函数调用吧。会等待另外一个程序结束后再往下走的。step1 RunShell 你要调用的程序 step2 读取2.txt
VB调用外部的exe文件,必须知道这个add.exe文件的句柄,才能调用这个exe的内容,这些比较麻烦,你应该好好了解VB调用外部exe文件的操作。
Private Declare Function GetExitCodeProcess Lib "kernel32" (ByVal hProcess As Long, lpExitCode As Long) As Long
Private Declare Function CloseHandle Lib "kernel32" (ByVal hObject As Long) As Long
Private Const PROCESS_QUERY_INFORMATION = &H400
Private Const STATUS_PENDING = &H103Private Sub RunShell(cmdline As String)
Dim hProcess As Long
Dim ProcessId As Long
Dim ExitCode As Long
ProcessId = Shell(cmdline, 1)
hProcess = OpenProcess(PROCESS_QUERY_INFORMATION, False, ProcessId)
Do
Call GetExitCodeProcess(hProcess, ExitCode)
DoEvents
Loop While ExitCode = STATUS_PENDING
Call CloseHandle(hProcess)
End Sub用上面的函数调用吧。会等待另外一个程序结束后再往下走的。step1 RunShell 你要调用的程序
step2 读取2.txt
shell改用RunShell
其他什么都不用改即可。
2、外部程序计算完毕,写ini文件为非空值。
3、主程序读取ini文件,来确定是否运行完毕了,没运行完,延时等待,设一个最大值,超过最大时间,则判断出错,重新计算。
不过在Do循环中我都是加了Sleep的,这样不会造成CPU占用过高。
只要对实时性不是太苛刻(允许15ms左右的延迟),建议还是加上Sleep。这种方式很灵活,可以设置最长等待时间、可以“人工终止等待”等等。
我觉得6楼说的跟这个相比,没有任何优势可言;
特别是楼主所说“外部程序”是第三方的、它根本不给你写什么ini文件,你就完全没辙了。