subject_17177.htm
来自「一些关于vc的问答」· HTM 代码 · 共 24 行
HTM
24 行
<p>
序号:17177 发表者:焉蓝 发表日期:2002-10-09 10:47:11
<br>主题:各位高手,请教一个多线程的问题!
<br>内容:我在生成的线程里采集8个数据,放在一个指针,采集完后,用::SendMessage发送一个消息,去处理采集的数据,但分析时,我发现数据已发生变化,全局变量、堆、我都用了,但不行,请各位高手指点一下,万分感谢!·
<br><a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p>
<hr size=1>
<blockquote><p>
回复者:CDMA2000 回复日期:2002-10-09 10:54:13
<br>内容:对多线程的数据处理,对共享的数据应该做保护<BR>比如可以使用互斥对象,信号和锁对象等<BR>也就是你在读写你的这段数据前要进行保护<BR>比如你定义一个CMute对象,在读写时调用该对象的Lock()<BR>读写完成后调用该对象的UnLock();
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>
<hr size=1>
<blockquote><p>
回复者:黄飚 回复日期:2002-10-09 11:06:56
<br>内容:1我建议你用Buffer机制度<BR>2读指针,写指针,Buffer要开得足够大<BR><BR>3当然你还要用其他机制,<BR><BR>int iBuufer[MAX_LENGTH];<BR>int iWright,iRead;<BR><BR>void Main()<BR>{<BR> iWright=0;<BR> iRead=0;<BR><BR>OnMessage()<BR>{<BR> while(iRead!=iWright)<BR>{<BR> iBuffer(iRead)<BR> iRead++;<BR> if(iRead>MAX_LEGNTH)<BR> iRead=0;<BR> }<BR><BR>}<BR><BR>}<BR><BR>void thread1()<BR>{<BR><BR> iBufer[iWright];<BR> iWright++;<BR> if(iWright>MAX_LENGTH)<BR> iWright=0;<BR> SendMessage(.....)<BR> <BR><BR>}<BR>
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>
<hr size=1>
<blockquote><p>
<font color=red>答案被接受</font><br>回复者:小戟 回复日期:2002-10-10 08:08:07
<br>内容:在win下,对于采集数据时,建议不要用全局变量、堆,因为消息是个队列了,数据会变化的;<BR>1、直接用消息把数据送出来,可看我以前的回复;<BR>2、同过一个链表,有数据,增加链表,发消息,受到消息,去掉一个表头即可,我以前也有回复。
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?