CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
可用分押宝游戏火热进行中... 专题改版:Java Web 专题
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  C++ Builder >  网络及通讯开发

请教 ServerSocket 回调函数的数据保护问题

楼主rudolf_he()2006-06-04 10:23:05 在 C++ Builder / 网络及通讯开发 提问

ServerSocket     的   ClientRead   事件在有数据到达的时候触发。  
   
  如果处理时间过长,那么就会出现函数重入的情况。  
   
  为此需要对一些全局变量做   数据同步   的保护。  
   
  查资料知道有一个     TCriticalSection   用之  
   
  .h   里  
  TCriticalSection   *CriticalSection;  
   
   
  .cpp  
  FormCreate   里  
  CriticalSection   =   new   TCriticalSection;  
   
  ServerSocket1ClientRead   里  
  CriticalSection->Acquire();  
  //处理全局变量、数据代码  
  CriticalSection->Release();  
   
   
  但是经测试,发现   CriticalSection   并未起作用。  
   
  不知道   CreateSemaphore()、CreateEvent()、WaitForSingleObject()、ReleaseSemaphore()、SetEvent()等等   是否只能用在   线程中?  
   
  请用过的   XDJM   不吝指教  
   
  谢谢!! 问题点数:50、回复次数:3Top

1 楼pp616(坏蛋)回复于 2006-06-06 12:15:41 得分 50

ClientRead   中不要做复杂的处理。可以把收到的数据放进一个数据队列。  
  然后另开线程去处理数据。Top

2 楼rudolf_he()回复于 2006-06-06 12:50:08 得分 0

(1)ClientRead   中有个计数器   pR   ,用于记录收到多少条数据;而后判断线程是否挂起,如果挂起则重新激活线程  
   
   
  (2)处理线程中有一处理计数器   pW   ,用于记录已处理了多少数据;线程中   pW   与   pR   比较,如果相同,说明无数据处理,线程挂起。  
   
  但是在实际运行时,线程挂起的同时,pR   的值发生了变化,导致判断出错,线程挂起后不能及时响应  
   
  也就是(2)中在准备挂起线程的时候,(1)判断线程还未挂起,未执行激活线程的代码,随后线程被挂起...Top

3 楼rudolf_he()回复于 2006-07-10 08:09:35 得分 0

谢谢!!Top

相关问题

关键词

得分解答快速导航

  • 帖主:rudolf_he
  • pp616

相关链接

  • CSDN Blog
  • 技术文档
  • 代码下载
  • 第二书店
  • 读书频道

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
世纪乐知(北京)网络技术有限公司 版权所有, 京 ICP 证 020026 号
北京创新乐知广告有限公司 提供技术支持
Copyright © 2000-2007, CSDN.NET, All Rights Reserved
GongshangLogo