博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
windows下开多个CMD窗口多个进程输出
阅读量:4931 次
发布时间:2019-06-11

本文共 2393 字,大约阅读时间需要 7 分钟。

题目有点拗口,不知道大家是否明白,具体的需求就是:

我有一个Helloworld程序,cout helloworld到标准输出,我想在一个主程序里面创建多个进程,每个进程开一个窗口,显示各自的输出。

大概就是这么个意思,关键在百度和谷歌上关于这个问题的说明都有点语焉不详,谷歌的E文的结果也不是很详细,但是还是有些提示性的东西(毕竟老外人多,

整好E对开发还是很重要),于是自己试了试,算是比较满意了,这里总结下,给需要的朋友参考。

 

用于输出的程序可以很简单,这里就一句cout << "Hello World!"<<endl;

当然你可以根据你的需要做多事很情,然后各种cout。

1 #include "stdafx.h" 2  3 using namespace std; 4  5 int _tmain(int argc, _TCHAR* argv[]) 6 { 7     cout << "Hello World!"<

主程序里面,可以采用两种不同的方式来打开窗口,一种是ShellExecuteEx,一种是CreateProcess.

需要注意的是CreateProcess,必须给他传一个CREATE_NEW_CONSOLE参数,不然helloworld显示在跟主程序在同一个窗口里面,这就不是我要的效果了。

1 #include "stdafx.h" 2 #include 
3 4 5 int _tmain(int argc, _TCHAR* argv[]) 6 { 7 8 //Using ShellExecuteEx 9 SHELLEXECUTEINFO sei; 10 11 SecureZeroMemory(&sei, sizeof(SHELLEXECUTEINFO)); 12 13 sei.cbSize = sizeof(SHELLEXECUTEINFO); 14 sei.lpVerb = L"open"; 15 sei.lpFile = L"cmd"; 16 sei.fMask = SEE_MASK_NOCLOSEPROCESS; 17 sei.lpParameters = L"/k E:\\work\\logAnalies\\multiCmd\\HelloWorld\\Debug\\HelloWorld.exe"; 18 sei.nShow = SW_SHOW; 19 20 ShellExecuteEx( &sei ); 21 22 //WaitForSingleObject(sei.hProcess, INFINITE); 23 24 printf("Process with ID:%i has exited.\n", GetProcessId(sei.hProcess));25 26 // Using CreateProcess27 STARTUPINFO si; 28 SecureZeroMemory(&si, sizeof(STARTUPINFO)); 29 30 si.cb = sizeof(STARTUPINFO); 31 32 33 PROCESS_INFORMATION pi; 34 35 BOOL result = CreateProcess( 36 L"c:\\windows\\system32\\cmd.exe", 37 L"/k E:\\work\\logAnalies\\multiCmd\\HelloWorld\\Debug\\HelloWorld.exe", 38 NULL, 39 NULL, 40 FALSE, 41 CREATE_NEW_CONSOLE, 42 NULL, 43 NULL, 44 &si, 45 &pi); 46 47 if(result) 48 { 49 WaitForSingleObject(pi.hProcess, INFINITE); 50 printf("Process with ID: %i has exited.\n", GetProcessId(pi.hProcess)); 51 CloseHandle(pi.hProcess); 52 } 53 54 system("PAUSE");55 return 0;56 }

开多个控制台窗口用于各个进程的监控,关键点我觉得是要明白windows的控制台其实是一个exe程序,所以createprocess或者

ShellExecuteEx的时候,是创建cmd.exe命令,然后让cmd去执行我们的helloworld.exe程序。 补充一点的是cmd.exe 后面跟着的/k 参数,意思是执行完后cmd并不关闭,如果是/c 则表示关闭。 希望对各位tx有用!

.

转载于:https://www.cnblogs.com/linbirg/archive/2012/12/12/2815471.html

你可能感兴趣的文章
scanf中的%[^\n]%*c格式
查看>>
启动Eclipse报Initializing Java Tooling错误解决方法
查看>>
用jquery来实现类似“网易新闻”横向标题滑动的移动端页面
查看>>
(原)基于物品的协同过滤ItemCF的mapreduce实现
查看>>
CSS可以和不可以继承的属性
查看>>
eclipse每次当我按ctrl+鼠标点击代码,自动关闭,产生原因及解决办法!!
查看>>
hbase
查看>>
用PHP将Unicode 转化为UTF-8
查看>>
HDOJ1002 A+B Problem II
查看>>
ADB server didn't ACK(adb不能开启
查看>>
网页内容抓取
查看>>
分布式和集群的区别
查看>>
Python基础(三)
查看>>
Sql server在cmd下的使用
查看>>
【BZOJ 1019】 1019: [SHOI2008]汉诺塔 (DP?)
查看>>
swing
查看>>
Continuous integration
查看>>
前端知识点总结
查看>>
github 在ubuntu 使用--常用命令
查看>>
hl7 V2中Message Control ID的含义及应用
查看>>