请教一个操作系统线程问题

kushinn 2009-11-28 10:27:18
软件界面上点“创建线程” 按钮,创建三个生产者线程(P1,P2,P3)和两个消费者线程(C1,C2),生产者和消费者线程共享一个长度为2KB的环型公共缓冲区,生产者向其中投放消息,消费者从中取走消息。只要缓冲区未满,生产者可将消息送入缓冲区;只要缓冲区未空,消费者可从缓冲区取走一个消息。
每个消息具下列结构格式:
消息头(1B,固定为0xaa),消息长度(1B),消息内容(nB),校验和(1B),检验和计算方式为消息长度和消息内容所有字节异或结果。
每个生产者每隔n毫秒(n用随机数产生,1到100毫秒之间,间隔不固定)生产一个消息加入缓冲区,并把消息产生时间和内容记录在一个文本文件中(或显示在列表框中)。P1每次生产的数据为26个大写字母, P2每次生产的数据为26个小写字母,P3每次生产的数据为10个数字。
每个消费者每隔n秒(n用随机数产生,1到5秒之间,间隔不固定)从缓冲区取走一个消息。每消费一个消息需要将消费时间和消息内容记录在一个文本文件中(或显示在列表框中)。
当用户按结束按钮时结束5个线程,并将5个文件内容显示出来进行对照。

是生产者与消费者的问题,我想知道的是
每个消息具下列结构格式:
消息头(1B,固定为0xaa),消息长度(1B),消息内容(nB),校验和(1B),检验和计算方式为消息长度和消息内容所有字节异或结果。
如何定义该结构体?
怎样赋值?
...全文
60 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
keyayi 2009-12-08
  • 打赏
  • 举报
回复
消息头(1B,固定为0xaa),消息长度(1B),消息内容(nB),校验和(1B),检验和计算方式为消息长度和消息内容所有字节异或结果。
如何定义该结构体?
怎样赋值?


1.都已经说了,有消息长度,而且P1,P2,P3生产的消息长度,又是不一样的,这样用结构体是实现不了的,结构体的长度都是固定,试问如果实现变长的消息呢?。

2. 这里根本不用定义结构体。

3.你接直接new char[X]个字符就行了。我给你举个例子,
例如P1每次生产的数据为26个大写字母,那么根据消息头(1B,固定为0xaa),消息长度(1B),消息内容(nB),校验和(1B),new char[X]里面依次的字节是:
消息头(1字节): 0xaa
消息长度(1字节):=消息头1+消息长度1+消息内容(26)+校验和1=29字节。转化为16进制是:0x1D
消息内容:依次添上各个字母.
校验和:从第一个字节和第2个字节异或,所得结果和下一个字节异或,到结束为止。

赋值:char *p1Message=new char [29];
memset(p1Message,0,29);
*p1Message=0xaa;
*(p1Message+1)=0x1D
..........下面你自己赋值。
zhangsifanbaba 2009-11-29
  • 打赏
  • 举报
回复
[精]分享几个古董 MSC7.0 VC++1.52 VC++4.0 VC++6.0标准版(不是市面上的VS6.0的企业版) VC++7.0Beta2
这么多软件换一个VS97。或者RMB求一个。
有VS97的和我联系。

15,472

社区成员

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

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