读书人

再发一帖此有关问题不懂望高人指点

发布时间: 2012-05-09 12:13:59 作者: rapoo

再发一帖,此问题不懂,望高人指点?
现有一抄表程序:页面1中有数据接收解析函数IOCPSEVER11Execute(S, long: Integer),此函数调用是在终端有数据上送时就会被调用执行;另外,此函数中调用了同页面1下的函数dealBBBBBB(termid:string;buffer:Tbuffer);此函数对抄送的数据进行了简单处理,然后此函数又调用另外一个页面2的一函数DealBBBBBB(termid:string;buffer:Tbuffer;cont:Integer);

现在的疑问是当有数据连续不断的上传数据时,此时函数IOCPSEVER11Execute会被多次调用。如果出现这么个情况,当当前上送的数据还没解析完,此时又有数据上送,那会不会造成函数中的数据冲突?
IOCPSEVER11Execute(S, long: Integer)中给dealBBBBBB(termid:string;buffer:Tbuffer)传入的参数是其中的局部变量,dealBBBBBB(termid:string;buffer:Tbuffer)中给DealBBBBBB(termid:string;buffer:Tbuffer;cont:Integer);传入的参数是根据dealBBBBBB(termid:string;buffer:Tbuffer)的形参来得到的......

希望大家帮助一下

[解决办法]
如果你期中 有公用的数据,就会出问题
所以要看你的具体使用情况,可以将接受的数据先放入内存列表,然后开一线程在后台从列表中取数据一条条处理
[解决办法]
不会冲突。
理由可以参考如下比喻:
“你放了一个苹果到桌子上,然后我从桌子上把苹果放进嘴里吃掉,而不是你不断的把苹果塞在我嘴里以至于我来不及咀嚼”。
[解决办法]
访问全局变量,加上锁
[解决办法]
这个采用一些同步的措施,应该就可以了。
其中一种方法,采用TQueue队列的形式。可以把队列数据的处理写在一个线程中。而添加数据的地方,添加数据完成之后,通过TEvent事件触发线程里面对对队列数据的处理。说白了,就是,数据添加和数据处理是分开的,而且不冲突的。
另外一种处理方法,对公共的数据存储对象用临界区TcriticalSection,互斥,等进行同步处理。

读书人网 >.NET

热点推荐