VC++处理一个多线程的一个经典问题

xiuxifeng 2013-04-01 09:16:59
我现在有一个VC++写的win32服务程序。该进程有好几个线程,其中主线程是通过接受数据并且处理数据的。现在呢,我的程序需要在很短时间内去不停接收数据,每隔10ms去发送命令,并且在这10ms内接收到,不然就换下一个命令。1s是一个周期。在这个一个周期内,我还想要处理数据,所以我把处理数据写成了一个线程,达到一个线程接收数据,一个线程来处理这些数据。我想问问我该采用哪中线程同步的方式是最好的。
创建一个缓冲吗?
还是使用windows消息机制来排队让处理数据的线程处理?
使用互斥对象?还是创建事件呢?

另外,每10ms的接收的数据还不一样,所以处理线程还要能够对先前的数据处理的过来。

所以请高手帮忙指点下就行!!!
...全文
311 11 打赏 收藏 举报
写回复
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
domoever 2013-04-04
  • 打赏
  • 举报
回复
建立3个buffer,一个读,一个写,一个中转,交换buffer地址就行。交换地址时互斥。
schlafenhamster 2013-04-04
  • 打赏
  • 举报
回复
知道纤程吗 ? 他是线程内 自己调度的。
小小爬虾 2013-04-04
  • 打赏
  • 举报
回复
异步操作效率更高吧。
kyotrue 2013-04-03
  • 打赏
  • 举报
回复
两个线程一读一写?可以不用互斥,采用循环缓冲的方式可以达到最高的效率。 http://www.ibm.com/developerworks/cn/linux/l-cn-lockfree/index.html
弱水垂钓 2013-04-03
  • 打赏
  • 举报
回复
事件、互斥都可以呀
china_jeffery 2013-04-03
  • 打赏
  • 举报
回复
可以创建一个线程安全的缓冲队列来实现数据的存储与读取
菜牛 2013-04-03
  • 打赏
  • 举报
回复
线程同步不一定都要用成本很高的同步对象,在同一个进程里用变量同步就够了,读写可以用同一块缓冲区,读指针和写指针不重叠就没有问题。
encoderlee 2013-04-02
  • 打赏
  • 举报
回复
还是说10ms接收一个数据,累计1s,也就是100个10ms,接收100次数据后才统一处理一次?
encoderlee 2013-04-02
  • 打赏
  • 举报
回复
不太理解你表述的是具体是什么意思。发送一个命令然后等待10ms看有没有数据发过来?没有就换下一个命令? 如果是这样的话,主线程可以开一个线程让它去接收数据并处理,有没有接收成功、有没有处理成功、还是处理完毕,都用windows消息机制发送消息通知主线程。然后自行退出。
xiuxifeng 2013-04-02
  • 打赏
  • 举报
回复
不是同一处理的。10ms我要向下发送一个命令来获取数据。并且保存起来。比如先保存一个数组里。1s作为一个周期。循环100次。都要往这个数据里面放数据,并且呢,我想要另外一个线程来同步处理这些数组,最好能把接收的数据都能处理过来(不覆盖)。当然处理数据时间比较长点。所以我应该采用什么方式来调和两个线程之间合作。怎样来排队这些每次接收的数据呢。(接收数据我目前用的主线程)
enic 2013-04-01
  • 打赏
  • 举报
回复
标记一下,以后再看
发帖
进程/线程/DLL

1.5w+

社区成员

VC/MFC 进程/线程/DLL
社区管理员
  • 进程/线程/DLL社区
加入社区
帖子事件
创建了帖子
2013-04-01 09:16
社区公告
暂无公告