windows共享内存读取

kang92 2016-07-29 10:01:27
windows A、B两个进程用共享内存通信,A启用一个线程从共享内存读数据,如何做到A将线程挂起,直到B往里面写了数据才从共享内存里面读数据。
即如何判断有人往共享内存里面写入的东西呢。
...全文
309 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
encoderlee 2016-07-29
  • 打赏
  • 举报
回复
线程同步问题,可以使用互斥量、事件对象来进行同步,A线程在读取数据前用WaitForSingleObject等待一个同步对象,B线程写完数据后解锁同步对象,A线程便可以访问数据。
当然也可以用管道、邮槽来通信,默认情况下是阻塞的,A线程试图从管道、邮槽读数据时将被阻塞住,直到B线程往里面写了数据
kang92 2016-07-29
  • 打赏
  • 举报
回复
引用 3 楼 jacksonfan 的回复:
发送线程消息postthreadmessage 当线程b写完数据后,发送消息到线程a,线程a才开始读取
我两个线程不在同一个进程里面。线程id怎么获得
kang92 2016-07-29
  • 打赏
  • 举报
回复
引用 2 楼 VisualEleven 的回复:
可以通过进程间通讯机制,管道,油槽,命名事件对象,socket,Windows消息等
你说的这些都是进程间通信的方式。和我的问题不一样
kang92 2016-07-29
  • 打赏
  • 举报
回复
引用 1 楼 wxhxj0268 的回复:
这种在Windows系统中用共享内存通信的方法既原始又麻烦,还有程序崩溃的危险,改用消息吧。 要判断是否有人往共享内存中写入东西,当然是不停的读它,直到有东西;或者建立事件,通过事件消息(那还不如直接用消息通信)获得。
改用消息是什么意思呢。
jacksonfan 2016-07-29
  • 打赏
  • 举报
回复
发送线程消息postthreadmessage 当线程b写完数据后,发送消息到线程a,线程a才开始读取
Eleven 2016-07-29
  • 打赏
  • 举报
回复
可以通过进程间通讯机制,管道,油槽,命名事件对象,socket,Windows消息等
笨笨仔 2016-07-29
  • 打赏
  • 举报
回复
这种在Windows系统中用共享内存通信的方法既原始又麻烦,还有程序崩溃的危险,改用消息吧。 要判断是否有人往共享内存中写入东西,当然是不停的读它,直到有东西;或者建立事件,通过事件消息(那还不如直接用消息通信)获得。
encoderlee 2016-07-29
  • 打赏
  • 举报
回复
不同进程CreateEvent的名字相同,是同一个Event? 是,互斥量、事件对象、信号量等,这些同步对象都是跨进程的
kang92 2016-07-29
  • 打赏
  • 举报
回复
还是决定用socket通信吧,慢点就慢点。
kang92 2016-07-29
  • 打赏
  • 举报
回复
我主要是要实现一个Java程序和Windows程序之间的通信
kang92 2016-07-29
  • 打赏
  • 举报
回复
引用 7 楼 CharlesSimonyi 的回复:
线程同步问题,可以使用互斥量、事件对象来进行同步,A线程在读取数据前用WaitForSingleObject等待一个同步对象,B线程写完数据后解锁同步对象,A线程便可以访问数据。 当然也可以用管道、邮槽来通信,默认情况下是阻塞的,A线程试图从管道、邮槽读数据时将被阻塞住,直到B线程往里面写了数据
不同进程CreateEvent的名字相同,是同一个Event?
jacksonfan 2016-07-29
  • 打赏
  • 举报
回复
引用 6 楼 kang92 的回复:
[quote=引用 3 楼 jacksonfan 的回复:] 发送线程消息postthreadmessage 当线程b写完数据后,发送消息到线程a,线程a才开始读取
我两个线程不在同一个进程里面。线程id怎么获得[/quote] 初始时两个进程先通信一次,取得对方的线程id应该是可以的吧

15,471

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 进程/线程/DLL
社区管理员
  • 进程/线程/DLL社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧