标签:
控制台程序不管启动的时候是否有窗口,其参数都只有一个,那就是exe的全路径加exe的名字
//运行时不显示控制台窗口
#pragma comment(linker,"/subsystem:\"Windows\" /entry:\"mainCRTStartup\"")
#include <fstream>
using namespace std;
int main(int argc, char** argv)
{
ofstream fout("data.txt");
for (int i = 0;i<argc;++i)
{
fout<<"argc="<<i<<",argv["<<i<<"]="<<argv[i]<<endl;
}
return 0;
}
进程可以理解成一个exe
控制台程序在启动运行的时候默认会调用
代表着一个进程的代理,可以通过ACE_Process_Options设置进程启动的参数,可以启动一个exe,可以获取进程退出的返回值,可以启动其他的子进程(由当前进程启动的进程就就当前进程的子进程)
下面的程序会启动一个进程,这个进程再递归启动子进程,从而实现计算10的阶乘,最终退出的进程将结果写入文件中。很有代表意义:
#ifdef _DEBUG
#pragma comment (lib,"ACEd.lib")
#else
#pragma comment (lib,"ACE.lib")
#endif
#include "ace/OS.h"
#include "ace/Log_Msg.h"
#include "ace/Process.h"
#include <fstream>
using namespace std;
int main(int argc, char** argv)
{
//可移植的
ACE_Process_Options options;
int n = 10;
//最高层的exe,程序第一次启动的那个exe
if (argc == 1)
{
//调用子进程需要的命令行参数,第一个参数是当前exe名字说明还会再启动当前exe的副本,第二个参数是n-1
options.command_line("%s %d",argv[0],n-1);
}
//到最后一个被启动的进程时,直接返回1
else if (atoi(argv[1]) == 1)
{
return 1;//从这里就可以看出来main的返回值是干嘛的了吧
}
else
{
//计算当前进程所属的n
n = atoi(argv[1]);
options.command_line("%s %d",argv[0],n-1);
}
ACE_Process child;
//再启动一个当前exe的新副本,但是参数不同
child.spawn(options);
//child会等待新exe的退出之后再执行wait()之后的代码,wait()是可移植的
child.wait();
//当前进程所属的n乘以child创建的进程的返回值,作为当前进程的返回值
ofstream fout("data.txt");
int factorial = n* child.exit_code();
fout<<factorial;
return factorial;
}
版权声明:本文为博主原创文章,未经博主允许不得转载。
标签:
原文地址:http://blog.csdn.net/calmreason/article/details/48087113