9524|24

72

帖子

0

TA的资源

一粒金砂(初级)

楼主
 

wince线程之间通信方式! [复制链接]

在同一个进程当中,有多个线程,线程之间的通信用什么方式最好

我的程序是没有界面的,我用过消息方式,但是发现传过去的参数出现乱码的几率比较大!所以就没有用了,
用事件的话又不能传递参数,所以想请教一下,还有没有什么比较可靠的方式来实现线程间的通信,并且需要传递参数,
据说如果使用全局变量的方式是比较危险的,所以我现在暂时使用了全局变量加事件的方式来实现线程间通信以及参数传递!

请问有没有更好的方式!
此帖出自WindowsCE论坛

最新回复

ding  详情 回复 发表于 2010-5-7 21:21
点赞 关注
 

回复
举报

82

帖子

0

TA的资源

一粒金砂(初级)

沙发
 
全局变量可能有危险,可是也真的很方便,以前学习的时候我也是尽量不用,
不过,等到真的做起项目来就不管这些了,客户是上帝,如果客户的要求不
满足,领导k你,客户也对你有意见。所以说,该用就用,何况你已经用事件
加锁了,轻易不会出问题的。
此帖出自WindowsCE论坛
 
 
 

回复

72

帖子

0

TA的资源

一粒金砂(中级)

板凳
 
可以考虑用WM_COPYDATA,传递少量参数。
全局变量太危险了,除非都是只读的。
此帖出自WindowsCE论坛
 
 
 

回复

72

帖子

0

TA的资源

一粒金砂(初级)

4
 
全局变量这样也可以啊!
你注意控制一下就行了
此帖出自WindowsCE论坛
 
 
 

回复

67

帖子

0

TA的资源

一粒金砂(初级)

5
 
或者用共享内存+事件的方式.
此帖出自WindowsCE论坛
 
 
 

回复

55

帖子

0

TA的资源

一粒金砂(初级)

6
 
“消息方式,但是发现传过去的参数出现乱码的几率比较大”其实这是个问题呀,怎么会出现乱码呢?而且几率还很大?
要是都这样,Windows早就崩溃了。肯定是你的消息传递程序有问题。能改掉这个bug,应该就不需要想别的方法了。
此帖出自WindowsCE论坛
 
 
 

回复

75

帖子

0

TA的资源

一粒金砂(初级)

7
 
没有界面?不知道是什么意思.
此帖出自WindowsCE论坛
 
 
 

回复

77

帖子

0

TA的资源

一粒金砂(初级)

8
 
还是共享资源和同步机制比较通用。

没有窗口怎么发消息
此帖出自WindowsCE论坛
 
 
 

回复

70

帖子

0

TA的资源

一粒金砂(初级)

9
 
全局变量担心被多个线程同时修改的话,可以用关键代码段(CriticalSection)来限定,wince支持相关API。
此帖出自WindowsCE论坛
 
 
 

回复

61

帖子

0

TA的资源

一粒金砂(初级)

10
 
没有窗口一样可以发消息的哦-_-!
PostThreadMessage
此帖出自WindowsCE论坛
 
 
 

回复

69

帖子

0

TA的资源

一粒金砂(初级)

11
 
引用 9 楼 nbcool 的回复:
没有窗口一样可以发消息的哦-_-!
PostThreadMessage


对,没有窗口就是使用这个发送消息,据说这个函数不保证安全性,如果是窗口消息的话,windows可以保证一定能够接收到

那我还是用全局变量算了,我觉得这样比较好用,用临界区来保护一下就OK
此帖出自WindowsCE论坛
 
 
 

回复

62

帖子

0

TA的资源

一粒金砂(初级)

12
 
希望能找到更好的线程通信方式
此帖出自WindowsCE论坛
 
 
 

回复

92

帖子

0

TA的资源

一粒金砂(初级)

13
 
PostThreadMessage 这个不行的,如果你发送的消息参数包含指针,指针又指向的是局部变量,肯定不能正确处理消息.就算是WM_COPYDATA也一样要用SendMessage发送才可以.
此帖出自WindowsCE论坛
 
 
 

回复

83

帖子

0

TA的资源

一粒金砂(初级)

14
 
忘了还有PostThreadMessage了。
需要线程内部处理消息的分发,必须要有消息队列的。

挺麻烦的。还是用同步机制好了。

PostThreadMessage处理一些状态参数还是可以的。
lz说的不安全是什么意思?讨论一下
此帖出自WindowsCE论坛
 
 
 

回复

85

帖子

0

TA的资源

一粒金砂(初级)

15
 
引用 12 楼 Reallyu 的回复:
PostThreadMessage 这个不行的,如果你发送的消息参数包含指针,指针又指向的是局部变量,肯定不能正确处理消息.就算是WM_COPYDATA也一样要用SendMessage发送才可以.


sendMessage只能发送窗口消息吧,好像只针对有窗口的程序,而我的程序没有窗口,只有几个线程在运行!
此帖出自WindowsCE论坛
 
 
 

回复

66

帖子

0

TA的资源

一粒金砂(初级)

16
 
引用 13 楼 lenux 的回复:
忘了还有PostThreadMessage了。
需要线程内部处理消息的分发,必须要有消息队列的。

挺麻烦的。还是用同步机制好了。

PostThreadMessage处理一些状态参数还是可以的。
lz说的不安全是什么意思?讨论一下


我在使用PostThreadMessage传递几个文件名到另外一个线程的时候,另外一个线程接收到的数据就不正常,是一些乱码,
此帖出自WindowsCE论坛
 
 
 

回复

87

帖子

0

TA的资源

一粒金砂(初级)

17
 
PostThreadMessage 的时候,你可以用File Mapping 传递数据,谁会傻到带个局部变量的指针。
此帖出自WindowsCE论坛
 
 
 

回复

75

帖子

0

TA的资源

一粒金砂(初级)

18
 
TCHAR* temp = new TCHAR[128];
wcscpy(temp, L"\\asd\\asdf.temp");

PostThreadMessage(hwnd, msgid, 0, (LPARAM)temp);


在另一个线程中接收消息并释放内存,这样不行吗?
此帖出自WindowsCE论坛
 
 
 

回复

59

帖子

0

TA的资源

一粒金砂(初级)

19
 
“传递几个文件名到另外一个线程的时候,另外一个线程接收到的数据就不正常,是一些乱码”,不会是字符集的设置问题吧?怎么看怎么像中文名传过去,被搞乱了。
此帖出自WindowsCE论坛
 
 
 

回复

61

帖子

0

TA的资源

一粒金砂(初级)

20
 
引用 17 楼 lenux 的回复:
TCHAR* temp = new TCHAR[128];
wcscpy(temp, L"\\asd\\asdf.temp"); 这个是什么意思,请教一下,没见过啊

PostThreadMessage(hwnd, msgid, 0, (LPARAM)temp);


在另一个线程中接收消息并释放内存,这样不行吗?
此帖出自WindowsCE论坛
 
 
 

回复
您需要登录后才可以回帖 登录 | 注册

查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/9 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表