windows系统调用 利用事件对象实现进程通信

时间:2014-06-14 20:48:50   收藏:0   阅读:383
 1 #include "iostream"
 2 #include "windows.h"
 3 #include "cstring"
 4 using namespace std;
 5 
 6 static LPCTSTR g_szContinueEvent="w2kdg.EventDemo.event.Continue";
 7 
 8 BOOL CreateChild(){
 9     TCHAR szFilename[MAX_PATH];
10     GetModuleFileName(NULL,szFilename,MAX_PATH);
11 
12     TCHAR szCmdLine[MAX_PATH];
13     sprintf_s(szCmdLine,"\"%s\" child",szFilename);
14 
15     STARTUPINFO si;
16     ZeroMemory(reinterpret_cast<void*>(&si),sizeof(si));
17     si.cb=sizeof(si);
18 
19     PROCESS_INFORMATION pi;
20 
21     BOOL bCreateOK=CreateProcess(
22         szFilename,
23         szCmdLine,
24         NULL,
25         NULL,
26         FALSE,
27         0,
28         NULL,
29         NULL,
30         &si,
31         &pi
32         
33         );
34 
35     if(bCreateOK){
36         CloseHandle(pi.hProcess);
37         CloseHandle(pi.hThread);
38     }
39 
40     return (bCreateOK);
41 
42 }
43 
44 void WaitForChild(){
45     HANDLE hEventContinue=CreateEvent(
46         NULL,
47         TRUE,
48         FALSE,
49         g_szContinueEvent
50         );
51 
52     if(hEventContinue!=NULL){
53         printf("Event creates.\n");
54         if(CreateChild()){
55             printf("Child process created.\n");
56             printf("Parent process waiting on child process.\n");
57             WaitForSingleObject(hEventContinue,INFINITE);
58             printf("Parent process received the event signaling from child process.\n");
59         }
60 
61         CloseHandle(hEventContinue);
62     }
63 
64 }
65 
66 void SignalParent(){
67     HANDLE hEventContinue=OpenEvent(
68         EVENT_MODIFY_STATE,
69         FALSE,
70         g_szContinueEvent
71         );
72 
73     if(hEventContinue!=NULL){
74         SetEvent(hEventContinue);
75         printf("Child process begining...\n");
76     }
77 
78     CloseHandle(hEventContinue);
79 }
80 
81 int main(int argc,char *argv[]){
82     if(argc>1&&strcmp(argv[1],"child")==0){
83         SignalParent();
84     }
85     else{
86     
87     WaitForChild();
88     printf("Parent process released.\n");
89     }
90     getchar();
91     return 0;
92 
93 }

 

windows系统调用 利用事件对象实现进程通信,布布扣,bubuko.com

评论(0
© 2014 mamicode.com 版权所有 京ICP备13008772号-2  联系我们:gaon5@hotmail.com
迷上了代码!