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

 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系统调用 利用事件对象实现进程通信

时间: 2024-11-15 15:55:53

windows系统调用 利用事件对象实现进程通信的相关文章

windows下多线程同步(利用事件对象,互斥对象,关键代码段)实现

一:利用事件实现线程同步 1.createthread函数的用法 hThread = CreateThread(&security_attributes, dwStackSize, ThreadProc,pParam, dwFlags, &idThread) ; HANDLE CreateThread( LPSECURITY_ATTRIBUTES lpThreadAttributes, DWORD dwStackSize, LPTHREAD_START_ROUTINE lpStartAdd

利用win32 api实现进程通信---通过剪切板

// c#中win32 api的调用 //windows 消息机制的原理 //clipboard viewer chain. using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Text; using System.Windows.Forms; using System.Runtime.I

Windows进程通信-共享内存空间

三个模块 1,game.exe,三个方法,控制台输入指令('A','B','R')分别控制三个方法的调用: 2,WGDll.dll,要注入到game进程中的dll文件: 3,myconsole.exe,用来注入dll文件的程序: 先开启game进程,然后用myconsole把dll注入到game,dll模块和myconsole模块利用共享内存实现进程通信,在myconsole的控制台输入指令,dllmokuai接受指令,调用game模块的方法,达到控制game的目的 game模块 #includ

几种Windows进程通信

32位Windows采用虚拟内存技术使每个进程虚拟4G内存,在逻辑上实现了对进程之间数据代码的分离与保护.那么相应的进程之间的通信也就有必要整理掌握一下. Windows进程间通讯的方法有很多:管道.邮件槽.剪切板.共享内存.消息.套接字.RPC.DDE等. 但是他们大部分拥有一个共同的本质:利用Windows操作系统高2GB内核共享空间进行数据传递的桥梁,所以他们都是内核对象! 所以他们大部分都要遵循:A创建对象-->A写入数据-->B打开A创建的对象-->B读入数据的规则 下面着重通

Windows进程通信 -- 共享内存(1)

共享内存的方式原理就是将一份物理内存映射到不同进程各自的虚拟地址空间上,这样每个进程都可以读取同一份数据,从而实现进程通信.因为是通过内存操作实现通信,因此是一种最高效的数据交换方法. 共享内存在 Windows 中是用 FileMapping 实现的,从具体的实现方法上看主要通过以下几步来实现: 1.调用 CreateFileMapping 创建一个内存文件映射对象: HANDLE CreateFileMapping( HANDLE hFile, // handle to file to ma

Windows进程通信 -- 共享内存

享内存的方式原理就是将一份物理内存映射到不同进程各自的虚拟地址空间上,这样每个进程都可以读取同一份数据,从而实现进程通信.因为是通过内存操作实现通信,因此是一种最高效的数据交换方法. 共享内存在 Windows 中是用 FileMapping 实现的,从具体的实现方法上看主要通过以下几步来实现: 1.调用 CreateFileMapping 创建一个内存文件映射对象: HANDLE CreateFileMapping( HANDLE hFile, // handle to file to map

unity3d进程通信利用WM_COPYDATE和HOOK

hello,近期用unity做了进程通信,应该是和c++的PC端实现通信,才開始一头雾水,后来实现了才知道好繁杂......先感谢对我提供帮助的百度,谷歌以及游戏圈的大大们. 在进程通信中非常多方法,可是wm_copydate绝对要比别的什么内存共享好了很多. unity大部分用c#语言,c#本身Forms这个dll里面也提供了对windows消息的接收可是在unity中无法非常好地使用System.Windows.Forms,所以在以下我的代码我用unity发送进程消息的是 user32.dl

javascript事件之:jQuery事件中实例对象和拓展对象之间的通信

我们总结过jQery事件中的实例原型对象对外接口和拓展对象,现在我们看看他们是如何进行通信联系的. 先来看便捷方法: 1 //调用的还是实例对象下的on()和trigger() 2 jQuery.each( ("blur focus focusin focusout load resize scroll unload click dblclick " + 3 "mousedown mouseup mousemove mouseover mouseout mouseenter

windows系统调用 进程终止

1 #include "windows.h" 2 #include "iostream" 3 #include "stdio.h" 4 using namespace std; 5 6 static LPCTSTR q_szMutexName="w2kdg.ProcTerm.mutex.Suicide"; 7 8 HANDLE StartClone(){ 9 TCHAR szFilename[MAX_PATH]; 10 Get