用createproess可以开一个进程去打开一个执行程序,但如何用线程去打开
一个执行程序呢?
一个执行程序呢?
解决方案 »
- 如何调用另外一个对话框的计算结果
- win7下LoadLibrary报错126,无法加载模块???XP下可以。
- mfc 单文档 对话框里的 打印预览 江湖救急
- delete 出错
- 有流媒体的专门论坛吗
- 如何利用时间进行查找?
- 有人用过oicq那样可以上下滑动滑块的控件吗?
- COM控件如何得到自身DLL文件所在目录
- 如何继承模板类CArray
- 请教VC熟手,如果我在build->configurations菜单项中把Win32 DEBUG选项删除, 我怎么才能恢复DEBUG模式?
- 简单问题,如何将CString转换成Int
- 又放100分,求《图象文件格式 Windows编程》(张维谷 林福宗)购买地址!
打开的可执行程序,本身就是调用CreateProcess这个进程的子进程。
每个可执行程序一旦load到内存里,都会创建一个进程,同时该进程创建一个主线程。
可以在调用程序中 开辟一个线程,在这个线程中再去调用CreateProcess打开另一个可执行程序,但是,被打开的这个可执行程序,依然在内存中是一个进程的形式,同时拥有一个活泼的可被调度的主线程。
//线程函数
UINT ThreadProc(LPVOID param)
{
::ShellExecute(NULL, "OPEN", "iexplore.exe",NULL,NULL, SW_SHOW );
return 0;
}//开启线程
AfxBeginThread( ThreadProc, this);
"C:\\test.exe", //运行程序名
NULL,
NULL,
FALSE,
NORMAL_PRIORITY_CLASS|CREATE_NEW_CONSOLE,
NULL,
NULL,
&si,
&pi);if(!bCreate)
{
AfxMessageBox("程序打开错误!");
}
奇怪..
其实从createprocess中可直接取到句柄,现贴出来大家共同学习。。PROCESS_INFORMATION pi;
BOOL bCreate=CreateProcess(NULL,
"c:\\test.exe", //运行程序名
NULL,
NULL,
FALSE,
NORMAL_PRIORITY_CLASS|CREATE_NEW_CONSOLE,
NULL,
NULL,
&si,
&pi);
hTest = pi.hProcess;::TerminateProcess(hTest,0);