大坡3D软件开发

关注3D软件技术

用户操作
[即时聊天] [发私信] [加为好友]
蔡军生ID:caimouse
1234671次访问,排名17好友254人,关注者406
C++,3D,VC++软件开发,写技术文章,操作系统开发
caimouse的文章
原创 602 篇
翻译 0 篇
转载 41 篇
评论 940 篇
蔡军生的公告

点击这里给我发消息

MSN: caimouse1976 at sina.com

最近评论
xavierye:发现另外一个源码分析blog,可以和楼主的一起看:
http://www.cnblogs.com/duguguiyu/archive/2008/10/02/1303095.html
xavierye:发现另外一个源码分析blog:
http://www.cnblogs.com/duguguiyu/archive/2008/10/02/1303095.html
shada:前面两个混帐,没资格评论开源。
用着盗版的Word写文章批评开源的人真不少。
shada:前面两个混帐,没资格评论开源。
用着盗版的Word写文章批评开源的人大有人在。
andylrj:Google的浏览器真差劲!!!体验一把真心说出,要做的事还很多,终于明白微软的IE为什么要做这么庞大了,做小确实不行!
文章分类
收藏
相册
3D引擎
第二人生
谷歌浏览器
开发板
历史回忆
常用连接
人生历程
存档
软件项目交易
订阅我的博客
XML聚合  FeedSky

原创 Windows API一日一练(87)CreateProcess函数收藏

新一篇: Windows API一日一练(88)EnumProcesses函数 | 旧一篇: Windows API一日一练(86)GetClipboardData函数

人们需要处理的信息越来越复杂,往往在一个应用程序里是处理不完的,因此,就出现多个应用程序协同处理同一件事情。当然多个应用程序分开处理,也是比较容易开发,并且让应用程序复杂难度迅速降低。比如在开发一个银行的交易系统,有一个报表生成的主程序,然后还有很多小的,不同的报表生成程序。这样就需要从主程序里创建小报表程序进行运行。创建进程运行,需要使用函数CreateProcess来实现。
 
函数CreateProcess声明如下:
 
 
WINBASEAPI
BOOL
WINAPI
CreateProcessA(
    __in_opt    LPCSTR lpApplicationName,
    __inout_opt LPSTR lpCommandLine,
    __in_opt    LPSECURITY_ATTRIBUTES lpProcessAttributes,
    __in_opt    LPSECURITY_ATTRIBUTES lpThreadAttributes,
    __in        BOOL bInheritHandles,
    __in        DWORD dwCreationFlags,
    __in_opt    LPVOID lpEnvironment,
    __in_opt    LPCSTR lpCurrentDirectory,
    __in        LPSTARTUPINFOA lpStartupInfo,
    __out       LPPROCESS_INFORMATION lpProcessInformation
    );
WINBASEAPI
BOOL
WINAPI
CreateProcessW(
    __in_opt    LPCWSTR lpApplicationName,
    __inout_opt LPWSTR lpCommandLine,
    __in_opt    LPSECURITY_ATTRIBUTES lpProcessAttributes,
    __in_opt    LPSECURITY_ATTRIBUTES lpThreadAttributes,
    __in        BOOL bInheritHandles,
    __in        DWORD dwCreationFlags,
    __in_opt    LPVOID lpEnvironment,
    __in_opt    LPCWSTR lpCurrentDirectory,
    __in        LPSTARTUPINFOW lpStartupInfo,
    __out       LPPROCESS_INFORMATION lpProcessInformation
    );
#ifdef UNICODE
#define CreateProcess CreateProcessW
#else
#define CreateProcess CreateProcessA
#endif // !UNICODE
 
lpApplicationName是应用程序的名称。
lpCommandLine是命令行参数。
lpProcessAttributes是进程的属性。
lpThreadAttributes是线程的属性。
bInheritHandles是否继承父进程的属性。
dwCreationFlags是创建标志。
lpEnvironment是环境变量。
lpCurrentDirectory是当前目录。
lpStartupInfo是传给新进程的信息。
lpProcessInformation是进程返回的信息。
 
调用函数的例子如下:
#001 //创建进程。
#002  //蔡军生 2007/12/11 QQ:9073204 深圳
#003  void TestCreateProcess(void)
#004  {
#005         //清空结构。
#006         STARTUPINFO sInfo;
#007         PROCESS_INFORMATION pInfo;
#008 
#009         ZeroMemory( &sInfo, sizeof(sInfo) );
#010         sInfo.cb = sizeof(sInfo);
#011         sInfo.dwFlags = STARTF_USESHOWWINDOW;
#012         sInfo.wShowWindow = SW_SHOWNORMAL;
#013 
#014         ZeroMemory( &pInfo, sizeof(pInfo) );
#015 
#016         //创建一个进程。     
#017        if( !::CreateProcess( _T("WinCpp.exe"),  
#018              NULL,
#019              NULL,            
#020              NULL,            
#021              FALSE,           
#022              0,               
#023              NULL,            
#024              NULL,            
#025              &sInfo,             
#026              &pInfo )            
#027               )
#028         {
#029               //输出出错信息。
#030               const int nBufSize = 512;
#031               TCHAR chBuf[nBufSize];
#032               ZeroMemory(chBuf,nBufSize);
#033 
#034               wsprintf(chBuf,_T("CreateProcess failed (%d).\n"), GetLastError() );
#035               OutputDebugString(chBuf);
#036               return;
#037         }
#038 
#039 
#040         //等进程关闭。
#041         WaitForSingleObject( pInfo.hProcess, INFINITE );
#042 
#043         //关闭进程和线程的句柄。
#044         CloseHandle( pInfo.hProcess );
#045         CloseHandle( pInfo.hThread );
#046 
#047  }
 
 

发表于 @ 2007年12月11日 21:34:00|评论(loading...)|编辑

新一篇: Windows API一日一练(88)EnumProcesses函数 | 旧一篇: Windows API一日一练(86)GetClipboardData函数

评论

#runningstar 发表于2007-12-14 16:52:05  IP: 124.42.47.*
#043 //关闭进程和线程的句柄。
#044 CloseHandle( pInfo.hProcess );
#045 CloseHandle( pInfo.hThread );    为什么进程要在线程前面Close ?
2007-12-16 14:59:26作者回复
这个应没有关系,没有顺序性的要求,先关闭那个都一样的。这里主要释放资源。
发表评论  


当前用户设置只有注册用户才能发表评论。如果你没有登录,请点击登录
Csdn Blog version 3.1a
Copyright © 蔡军生