两个进程共享数据的方法

翻译 2014年09月04日 21:55:21

此方法来自《windows核心编程》第五版447、448页

为实现只能启动一个进程,先创建一个名为“nimei”的段:

#pragma data_seg("nimei")
long aaa=0;
#pragma data_seg()


其中的 aaa 用作计数器使用。然后告诉连接器把这个段设为共享:#pragma comment(linker,"/section:nimei,wrs")

R表示READ,W表示WRITE,E表示EXECUTE,S表示SHARED。

 

原理:这行代码告诉编译器把其中的字符串嵌入到所生成的.obj文件中的一个特殊的段中,这个段名叫“.drectve”。当连接器把所有的OBJ模块合并到一起的时候,连接器会检查每个OBJ模块的“.drectve”段,并将所有的字符串当做是传给连接器的命令行参数。

 

范例代码(用于限制只能启动一个进程)

#include<windows.h>
#include<winnt.h>
#pragma data_seg("nimei")
long aaa=0;
#pragma data_seg()
#pragma comment(linker,"/section:nimei,wrs")
void main()
{
 if(aaa!=0)
  return;
 else
  aaa++;
 int a;//用于阻塞
 cin>>a;//用于阻塞
}

DLL中建立进程共享数据段需要注意的语法问题

默认情况下,所有的数据段都是进程独立的,每个进程有自己的一份。但有时候进程共享一个数据段也是有需要的,为此VC++编译连接器提供了专门的语法,下面是一个典型的例子,建立了一个名为Shared的共享数据...
  • smstong
  • smstong
  • 2015年01月02日 17:56
  • 2434

跨进程共享内核对象方法:命名对象

下面的所有函数都可以创建命名的内核对象: CreateMutex,CreateEvent,CreateFileMapping, CreateSemaphore,CreateWaitableTime...

linux中进程共享内存的2种方法

共享内存可以在两个或多个进程间共享一个给定的内存区域,因为数据不需要在进程之间复制,相比于pipe、socket、file等共享通信方式,共享内存是最快的一种共享机制。linux中共享内存一般有2种方...

Windows进程共享内核对象的3种方法

转载的:http://www.51testing.com/html/51/n-821751.html Windows内核对象是什么我这里就不介绍了,任何一本关于windows编程的书都会介绍,...

父子进程共享内存通信的三种方法

很多源代码在父子进程进行通信时,都会yong

activity共享数据方法

  • 2014年10月23日 17:39
  • 57KB
  • 下载

同一个应用程序两个实例通过内存映射共享数据

#include #include #include int main(int argc, char * argv[]) { //这里需要注意 const字符串用 LPCSTR,后面也不必_T _T...

ContentProvider实现两个程序间共享数据

实现点击图一中的按钮,在log中查看执行结果---点击联系人信息出现图一下方的listview-----长按其中的某item,如图二----点击查看电话---如图三所示 创建一个android项目c...

线程间无需特别的手段进行通信,因为线程间可以共享数据结构,也就是一个全局变量可以被两个线程同时使用,不过要注意的是线程间需要做好同步。

线程间无需特别的手段进行通信,因为线程间可以共享数据结构,也就是一个全局变量可以被两个线程同时使用。不过要注意的是线程间需要做好同步,一般用mutex。可以参考一些比较新的UNIX/Linux编程的书...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:两个进程共享数据的方法
举报原因:
原因补充:

(最多只允许输入30个字)