用winexec执行多次(比如100次)操作,如何返回每次操作完成后的消息,并可以用进度条显示。(请问用线程,该如何操作?)
如果是在网络环境中,因为环境的不同,执行一次操作的时间也会不同,可能出现上一次的操作没有完成就进入了下一次操作,导致整个程序出错。
怎样解决这种问题或改进。
请各位富翁解答。谢谢!
如果是在网络环境中,因为环境的不同,执行一次操作的时间也会不同,可能出现上一次的操作没有完成就进入了下一次操作,导致整个程序出错。
怎样解决这种问题或改进。
请各位富翁解答。谢谢!
解决方案 »
- DELPHI栈和堆
- 有哪位高手知道这个程序错在哪里!
- 高手帮忙啊!关于插入数据库的问题!急急!菜鸟提问!
- 这个一般的SQL 查询写成存储过程如何写?
- 执行数据库内存溢出谁之过
- image 控件与 paintbox 控件的区别是什么?各自的优点又是什么呢? 如果选择选择其中一个控件来画图,请问那一个好一些呢?
- 怎么能让欢迎界面WelForm在2秒钟后,WelForm窗口长和宽逐渐缩小到不显示,需要有点动态的视觉效果,然后跳到主界面MainForm
- 急急(远水救近火)求得利用DLL数据传送的资料(一定给分),我已经等很久了。
- 111怎样使一个 edit.text 保存上一次执行是输入的内容?
- 请教 TWIN32FindData 是什么类型
- 如何给帮助我的高手结分?
- 有了MM,于是懂了Mum
怎么用呢???
function CreateProcessAndWait(const AppParams: String; Visibility: word;
ProcessMessage: boolean = true;
WaitTime: integer = 10000): DWord;
var
SI: TStartupInfo;
PI: TProcessInformation;
Proc: THandle;
MaxWaitTime: integer;
begin
FillChar(SI, SizeOf(SI), 0);
SI.cb := SizeOf(SI);
SI.wShowWindow := Visibility;
// Must send NULL for the first Param if DOS app
if (not CreateProcess(nil, PChar(AppParams),
nil, nil,
FALSE, NORMAL_PRIORITY_CLASS,
nil, PChar(ExtractFilePath(AppParams)),
SI, PI) ) then
raise Exception.CreateFmt('无法执行程序: ' + AppParams + ' 错误代码: %d', [GetLastError]);
Proc := PI.hProcess;
CloseHandle(PI.hThread); MaxWaitTime := WaitTime div 50; while (WaitForSingleObject(Proc, 50) = WAIT_TIMEOUT) and ( MaxWaitTime > 0 ) do
begin
if ProcessMessage then Application.ProcessMessages;
Dec(MaxWaitTime);
end; GetExitCodeProcess(Proc, Result); CloseHandle(Proc);
end;