当前位置: 首页 > news >正文

福田手机网站建设搜索软件

福田手机网站建设,搜索软件,做引流去那些网站好,做搜狗网站点击多线程中,线程需要暂停的原因多种多样,基本分为两大类,1是等待数据,2是系统资源紧张,停止计算以把资源让给其他线程.一般初学者会使用的方法就是使用SuspendThread和ResumeThread这两个API或者他们的包装函数进行操作&…

多线程中,线程需要暂停的原因多种多样,基本分为两大类,1是等待数据,2是系统资源紧张,停止计算以把资源让给其他线程.一般初学者会使用的方法就是使用SuspendThread和ResumeThread这两个API或者他们的包装函数进行操作,许多教材上都是这么说的,但这么作会带来及其严重的问题。
这两个API的问题是无法确定函数被暂停的位置,这是一个足以让任何多线程程序崩溃的问题。想象一种情况,A线程控制B线程暂停和继续,AB共享一个变量C,C由互斥量D加锁使得其可以在AB间安全共享。现在有一种最糟糕的情况,A暂停B的时候,B已经Lock了D,但是还没有Unlock.而A只有在Lock了D以后才能继续B,于是两个线程陷入死锁。并且几乎无法稳定重现这个bug,在多数情况下,也许1000次只有一次会死锁,于是你的程序变成定时炸弹。第二种情况更加常见,比如执行SQL查询的代码,获得了一个recordset的COM对象,于是通过while循环提取数据,在循环的过程中,线程被暂停。过了一段时间线程继续执行,你立刻会收到一个异常:管道的另一端没有任何进程。相当的莫名奇妙,其实用COM执行SQL的时候,返回结果并没有移动到用户进程的内存空间,而是SQL服务器保留了一个进程保存数据,但COM组件要求数据的时候再传送过去,太长时间没有数据提取要求,SQL服务器认为你的程序崩溃了,于是开始回收资源,关闭进程,这时你的程序倒是继续执行了。这个异常即使捕获也几乎无法处理,要回滚程序状态,重新执行查询麻烦到极点,你只有一条路,就是提醒用户程序出错了,我想用户的体验一定相当糟糕。
暂停线程必须想一个办法在能控制线程在能暂停的地方暂停,暂停点不能有任何数据已经上锁,上面说的那种while循环中也不能被暂停,还有一种就是当有大量内存被申请且还没有释放之前最好也不要被暂停。我建议大家用手动模式的信号量来实现。像这样申请一个信号量:

hEvent=::CreateEvent(NULL,TURE,TURE,lpName);//第二个参数是TURE,设定为手动模式,防止::WaitForSingleObject改变信号量的状态。


在所有线程可以被暂停的地方加上:


::WaitForSingleObject(hEvent,-1);


这样,只需要用这两个函数


::SetEvent(hEvent);//继续
::ResetEvent(hEvent);//暂停


发出暂停和继续的命令就可以了。线程只会停在你认为能停的地方,可以避免上述两种类型的BUG,不只是C++,所有语言都可以使用这个思想。

再增加一个,关于sleeping的替代,为什么不用sleeping?因为设定下sleeping以后不到时间线程是无法继续的,如果临时要立刻结束线程怎么办?杀掉线程?不对,如果线程需要清理资源呢?结果是内存泄露,而且如果线程有COM智能指针一类的东西也不能正常工作,这也可以严重到导致程序崩溃,或者导致其他程序崩溃。你可以用类似上面的方法,只不过信号量的作用改成标记是否线程结束,平时用sleeping的时候改成等待信号量到超时就可以了,如果不幸没超时,那就是收到线程必须马上结束的信号了,该干什么干什么,然后自然退出。

  http://blog.csdn.net/zju3020912063/archive/2007/02/09/1506139.aspx

转载于:https://www.cnblogs.com/papam/archive/2009/09/17/1568608.html

http://www.lbrq.cn/news/2451313.html

相关文章:

  • wordpress 内容置顶西安网站关键词优化推荐
  • 办公门户网站模板百度关键词权重查询
  • 南宁建站企业seo关键词优化
  • wordpress 后门检查宝鸡百度seo
  • 微信怎么做淘客网站seo站长工具查询系统
  • 电脑系统做的好的几个网站短视频入口seo
  • 网站做邮箱附近电脑培训班零基础
  • 做网站实验体会网站整站优化推广方案
  • wordpress用户自定义头像成都seo顾问
  • 怎样把自己做的网站发到网上建设网站公司
  • 帮忙做ppt的网站海南seo
  • 工程建设国家标准网站百度小说app下载
  • 个人可以做网站导航的网站吗佛山seo整站优化
  • wordpress分类目录第二页惠州seo优化
  • 沙田仿做网站朝阳seo推广
  • 网页制作与网站建设教程网站cms
  • brophp框架做网站站长之家ping
  • 济南网站建设系统介绍服务昆明优化网站公司
  • 武邑县网站建设陕西网页设计
  • wordpress 4.4.1兰州seo培训
  • 常用的网站建设技术百度seo优化教程免费
  • 两学一做网站注册重庆seo网络营销
  • app软件开发公司 用友yonmaker宁德seo公司
  • 网站上的广告位是怎么做的腾讯疫情实时数据
  • 网站建设标题微信公众号怎么开通
  • 宣传广告设计图片搜索引擎优化排名关键字广告
  • 做新闻类网站南宁seo网站排名优化公司
  • 如何管理网站页面设计超级优化
  • 建设教育局官方网站未来网络营销的发展趋势
  • 软件系统网站建设关键词挖掘啊爱站网
  • C++STL系列之set和map系列
  • ddos 放在多个云主机,同时运行
  • 解决 i.MX6ULL 通过 ADB 连接时权限不足问题 not in the plugdev group
  • Python 绘制各类折线图全指南:从基础到进阶
  • 【菜狗学聚类】时间序列聚类主要方法—20250722
  • 双指针算法介绍及使用(上)