• windows下开多个CMD窗口多个进程输出


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

    我有一个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!"<<endl;
     8     system("PAUSE");
     9     return 0;
    10 }

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

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

     1 #include "stdafx.h"
     2 #include <Windows.h>
     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 CreateProcess
    27   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有用!

    .

  • 相关阅读:
    页面get请求 中文参数方法乱码问题
    java版ftp简易客户端(可以获取文件的名称及文件大小)
    文件下载
    kafka:一个分布式消息系统
    Executor的线程代码
    验证码的生成
    二维码的简单实现
    rsync实现大致流程描述
    C++中模板生成时机
    gcc虚函数表生成时机
  • 原文地址:https://www.cnblogs.com/linbirg/p/2815471.html
Copyright © 2020-2023  润新知