delphi中等待外部应用程序执行完成后,再继续执行自有代码段

下面是两个函数,用来执行一个外部程序,缺省是异步执行

同步调用方法 RunProgram(‘c:\aa.exe‘,true);

参考IsProgram_Runing函数,你也可以调用RunProgram(‘c:\aa.exe‘)先异步执行,然后根据返回的进程句柄,自己判断程序是否执行结束。

// 异步执行

function RunProgram(ProgramName:string;Wait:Boolean=False):Cardinal;

var

StartInfo:STARTUPINFO;

ProcessInfo:PROCESS_INFORMATION;

begin

//执行外部程序,失败返回0,成功返回进程句柄

Result:=0;

if ProgramName=‘‘ then exit;

GetStartupInfo(StartInfo);

StartInfo.dwFlags:=StartInfo.dwFlags or STARTF_FORCEONFEEDBACK;

if not CreateProcess(nil,PChar(ProgramName),nil,nil,false,0,

nil,nil,StartInfo,ProcessInfo) then  exit;

Result:=ProcessInfo.hProcess;

//建立进程成功

//如果异步执行则退出

if not wait then exit;

while IsProgram_Runing(Result) do Application.ProcessMessages;

end;

// 同步执行

function IsProgram_Runing(hProcess:Cardinal):Boolean;

var

ExitCode:Cardinal;

begin

//查看进程是否正在运行

GetExitCodeProcess(hProcess,ExitCode);

Result := ExitCode=STILL_ACTIVE

end;

时间: 2024-10-05 19:24:32

delphi中等待外部应用程序执行完成后,再继续执行自有代码段的相关文章

主程序等待对话框响应后再顺序执行问题

在项目开发中,经常会用到对话框,Android的对话框都是异步进行的,但是有时候需要实现主程序等待对话框响应后再继续执行.下面以使用AlterDialog对话框返回true或者false之后,主程序再继续运行为例讲述如何实现主程序等待对话框响应后再顺序执行的方法. 思考一: 首先考虑到声明一个final 关键字的布尔型的局部变量,然后在对话框的"确认"和"取消"按钮的点击事件中对布尔型变量进行赋值,然后再执行主程序. 问题一:在代码的过程对布尔型变量进行赋值的时候提

JS如何实现文档加载完成后再去执行代码

JS如何实现文档加载完成后再去执行代码:在执行某些操作的时候,需要当文档完全加载完成之后再去执行,否则可能出现意向不到的情况,先看一段代码实例: <!DOCTYPE html> <html> <head> <meta charset=" utf-8"> <meta name="author" content="http://www.51texiao.cn/" /> <title&g

C# 本进程执行完毕后再执行下一线程

最近做了一套MES集成系统,由上料到成品使自动化运行,其中生产过程是逐步的,但是每一个动作都需要独立的线程进行数据监听,那么就需要实现线程等待. 代码: using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Thre

[转]VC中调用外部exe程序方式

本文转自:http://blog.sina.com.cn/s/blog_486285690100ljwu.html 目前知道三种方式:WinExec,ShellExecute ,CreateProcess,别人已经总结的很好了<vc中调用其他应用程序的方法(函数) winexec,shellexecute ,createprocess>,我全文转载一下,另外后面加点自己的总结(黑体部分,除了标题). 三个SDK函数: WinExec,ShellExecute ,CreateProcess可以实

iOS AFNetWorking中block执行完后再执行其它操作

需求:同时进行两次网络请求,网络请求是异步的,在网络请求成功后进行其它的操作.两个网络请求是这样,一个网络请求中block执行完之后,再进行其它操作,也是一样的原理,只是这时候不需要线程组了,只需要信号量.当然也适用于所有的block. 接下来就说下,在两次异步请求之后要做的操作. 利用线程组和信号量来完成,看代码 - (void)getData { NSString *appIdKey = @"8781e4ef1c73ff20a180d3d7a42a8c04"; NSString*

java并发编程学习:如何等待多个线程执行完成后再继续后续处理(FutureTask、synchronized、CyclicBarrier)

多线程应用中,经常会遇到这种场景:后面的处理,依赖前面的N个线程的处理结果,必须等前面的线程执行完毕后,后面的代码才允许执行. 在我不知道CyclicBarrier之前,最容易想到的就是放置一个公用的static变量,假如有10个线程,每个线程处理完上去累加下结果,然后后面用一个死循环(或类似线程阻塞的方法),去数这个结果,达到10个,说明大家都爽完了,可以进行后续的事情了,这个想法虽然土鳖,但是基本上跟语言无关,几乎所有主流编程语言都支持. package yjmyzz.test; publi

iOS 怎么在一个函数执行完毕得到某个参数值后再去执行他下边的代码

最近项目中牵扯OC与H5交互, 其中有一个问题是H5加载相册的照片,方法大体是: 和后台制定好协议, 在请求中拦截这个协议, 之后传递一个相对地址给H5来加载本地图片. 交互时, H5调用OC注册的方法, 回调OC传递过来的照片的相对地址以便加载手机照片. 这里出现问题了, 要做到H5同步加载手机的图片,并不容易, 因为调用OC注册的方法时, 就要接着返回图片的相对地址, 来不及等用户操作, 就要返回地址. 所以要想办法执行完用户的操作, 得到相对路径之后再传递给H5, 这里就要先执行完用户的选

给listview加动画,让动画执行结束后再刷新

问题:当给listview的条目加动画时,例如添加一个条目或者移除一个条目,动画效果会和添加删除条目的逻辑同时进行,因为动画并不是阻塞式的,这样会造成动画还没有结束,条目已经添加或者移除,从而动画作用在下面一个条目上面. 解决办法:想办法让动画执行完了之后再进行条目的添加或者移除操作(也就是刷新数据适配器),可以通过设置动画监听来实现,将要添加或者删除条目的逻辑放到动画监听的方法中,可以放到动画结束时调用的方法中,这样就保证了动画先执行,然后才刷新数据适配器 holder.iv_lock.set

js 执行完setTimeout再接着执行函数

var counter = 0; function increase(){ var d = jQuery.Deferred(); var doIncrease = function() { if(counter < 10){ counter++; setTimeout(doIncrease, 1000); } else { d.resolve(); } }; doIncrease(); return d.promise(); }; increase().then(function() { ale