Window API (六)多进程的操作
来源:互联网 发布:淘宝上的柠檬好吗 编辑:程序博客网 时间:2024/05/21 09:30
多进程也是必备的操作。写一个实例程序。调用一个Child.exe的可执行程序作为子进程。要先将Child.exe编译好放在同一目录下。
//Child.cpp#include<stdio.h>#include<windows.h>#define MyAlloc(size) HeapAlloc(GetProcessHeap(),0,size)#define MyFree(lpMem) HeapFree(GetProcessHeap(),0,lpMem)typedef struct _PROCESS_INFO{DWORD dwPid;HANDLE hProcess;DWORD dwPrioClass;DWORD dwHandleCount;DWORD dwAffinityMask;SIZE_T dwWorkingSetSizeMax;SIZE_T dwWorkingSetSizeMin;LPWSTR szwCommandLine;STARTUPINFO sti;}PROCESS_INFO,*LPPROCESS_INFO;HANDLE hMySelf;DWORD GetProcessInfo(LPPROCESS_INFO lppi){//PIDlppi->dwPid = GetCurrentProcessId();//Handlelppi->hProcess=GetCurrentProcess();//优先权lppi->dwPrioClass=GetPriorityClass(hMySelf);//句柄数量lppi->dwHandleCount=GetProcessHandleCount(lppi->hProcess,&lppi->dwHandleCount);//AffinityMaskGetProcessAffinityMask(hMySelf,&lppi->dwAffinityMask,NULL);//WorkingSetSizeGetProcessWorkingSetSize(hMySelf,&lppi->dwWorkingSetSizeMin,&lppi->dwWorkingSetSizeMax);lppi->szwCommandLine = GetCommandLineW();//Start Up InfoGetStartupInfo(&lppi->sti);return 0;}int APIENTRY WinMain(HINSTANCE hInstance,HINSTANCE hPrevInstance,LPSTR lpCmdLine,int nCmdShow){PROCESS_INFO pi;INT argc;WCHAR **argv;INT i;DWORD dwBufferSize = lstrlen(lpCmdLine)+MAX_PATH +1024;LPSTR szShowBuffer = (LPSTR)MyAlloc(dwBufferSize);hMySelf=hInstance;wsprintf(szShowBuffer,"启动参数\n实例句柄:%.8x,命令行参数: %s,显示选项:%.8x",hInstance,lpCmdLine,nCmdShow);MessageBox(NULL,szShowBuffer,"WinMain 函数参数",MB_OK);GetProcessInfo(&pi);//不支持汉字转化argv = CommandLineToArgvW(pi.szwCommandLine,&argc);*szShowBuffer = NULL;for(i=0;i<argc;i++){DWORD dwBufferSize =lstrlenW(*argv)+10;LPSTR szMBArgv= (LPSTR)MyAlloc(dwBufferSize);WideCharToMultiByte(CP_ACP,NULL,*argv,-1,szMBArgv,dwBufferSize,NULL,NULL);argv++;lstrcat(szShowBuffer,"\n");lstrcat(szShowBuffer,szMBArgv);MyFree(szMBArgv);}MessageBox(NULL,szShowBuffer,"参数",MB_OK);MyFree(szShowBuffer);return 0;}
然后是父进程的程序:
#include<stdio.h>#include<windows.h>DWORD CreateChildProcess(LPSTR szChildProcessCmd){STARTUPINFO si;PROCESS_INFORMATION pi;ZeroMemory(&si,sizeof(si));//Set the size of sisi.cb =sizeof(si);ZeroMemory(&pi,sizeof(pi));if(!CreateProcess(NULL,szChildProcessCmd,NULL,NULL,FALSE,0,NULL,NULL,&si,&pi)){printf("CreateProcess failed(%d).\n",GetLastError());return 1;}WaitForSingleObject(pi.hProcess,INFINITE);CloseHandle(pi.hProcess);CloseHandle(pi.hThread);return 0;}int main(){CreateChildProcess("Child.exe fsy 2011-12-19 as Gamer");}
直接运行子进程:
运行父进程:
本篇博客出自 阿修罗道,转载请注明出处:http://blog.csdn.net/fansongy/article/details/7083968
- Window API (六)多进程的操作
- Window API (二)文件操作
- Window API (三)堆管理操作
- 进程,作业 window api 调用
- 学习Linux笔记(六)--进程操作
- 进程与线程(一):一些关于进程的r3级API操作(1)
- Window API (五)内存操作与信息管理
- window 杀死进程的命令(转)
- 删除window的进程
- Window的进程堆
- 操作系统(六)--------进程控制操作(原语)
- Hadoop常用的API方法(六)
- 进程的基本操作,fork(),创建多进程。
- window api中 fstream文件操作函数
- 多进程与多线程(六)
- 多进程与多线程(六)--LinuxThreads
- (六)多进程实现TCP服务端
- Window路径相关的API
- JVM垃圾回收面临的问题
- (七)努力投入到工作中。
- oracle中execute immediate的使用(select/insert/update/delete)(
- JVM分代垃圾回收策略的基础概念
- 深入理解jvm
- Window API (六)多进程的操作
- java web中解决乱码的几种方法
- Eclipse快捷键
- Struts2的Annotation使用
- 成为Eclipse热键高手
- html语言中table表格内怎么换行
- location.reload() 和 location.replace()的区别和应用。
- eclipse界面问题
- 用C++开发应用于OSX和Windows上的AIR 本机拓展