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

新会网站建设不受限制的搜索引擎

新会网站建设,不受限制的搜索引擎,新网站建设流程,北京文化墙设计制作文章目录 一、主线程阻塞等待子线程返回1、代码示例2、代码改进 一、主线程阻塞等待子线程返回 主线程等待一个线程,此线程会开始连接一个服务器并循环读取服务器存储的值,主线程会阻塞直到连接服务器成功。因为如果不阻塞,可能上层业务刚开…

文章目录

        • 一、主线程阻塞等待子线程返回
          • 1、代码示例
          • 2、代码改进

一、主线程阻塞等待子线程返回

主线程等待一个线程,此线程会开始连接一个服务器并循环读取服务器存储的值,主线程会阻塞直到连接服务器成功。因为如果不阻塞,可能上层业务刚开始读不到数据。

1、代码示例
bool bConnect = false;  // 退出条件void connectAndReadFromServer()
{// 模拟等待2秒连接服务器成功Sleep(2000);bConnect = true;// 模拟一个无限循环读取服务器数据while (true){qDebug() << "I am working";Sleep(1000);}
}int main(int argc, char *argv[])
{std::thread t(connectAndReadFromServer);// 阻塞等待子线程返回,该方式在debug下运行ok,release下不会阻塞。while (!bConnect){}qDebug() << "main thread continue, start read " << bConnect;return 0;
}

坑点:上述代码在debug下运行是没有问题的,因为编译器会关闭大部分优化,目的是保留代码的原始行为,方便调试。 但是在release模式下,编译器发现该循环内部无任何操作,会采取循环消除优化,直接跳过,主线程继续执行,所以此时bConnect为false。

2、代码改进
int num = 0;
while (!bConnect)
{Sleep(0);   // ok 正常阻塞//空函数(); // no 直接优化去掉//num++;  // no bConnect条件拿不到
}
  • Sleep(0) :主动放弃CPU时间片,重新线程调度,还可以刷新主线程的寄存器和缓存,让线程重新从内存中读取变量的最新值。
  • 空函数() :在release下,该循环不执行,直接被编译器优化掉。
  • 变量++:就算连接成功,编译器也会在release下优化,bConnect条件变量的值被缓存到寄存器中(因为要大量循环读),导致主线程无法感知到变量的变化。循环一直执行。所以可以给变量num加volatile关键字,这样也是可以正常阻塞的,通知编译器不要优化该变量,每次都从内存中读取最新的值。
http://www.zhongyajixie.com/news/9404.html

相关文章:

  • 做网站课程免费网站推广优化
  • 西安网站建设工作室各类资源关键词
  • 糕点网站策划书网站的推广方式
  • 网站开发实习内容seo怎么做最佳
  • 网站开发系统存在的问题及进一步完善搜索引擎营销的流程
  • 自己做的网站排名靠前网站网络推广服务
  • 做彩票网站能挣到钱吗苏州seo网站系统
  • 福建省住房和城乡建设厅网站电话360优化大师官方网站
  • 有成crm海淀搜索引擎优化seo
  • 做任务的网站seo少女
  • 专业做网站的公司有域名注册信息
  • 渭南市建设工程招投标信息网搜索引擎优化行业
  • 郑州网站seo费用免费游戏推广平台
  • 做网站需要做手机版吗引擎搜索技巧
  • 企业注册好了怎么做网站竞价代运营公司哪家好
  • 做校园网站游戏推广员上班靠谱吗
  • 山西营销型网站建设宣传网站有哪些
  • 网站权重分析千锋教育培训收费一览表
  • 贵州能源网站 中企动力建设制作网站费用
  • 武汉企业如何建网站免费网页制作模板
  • 什么做网站做个多少钱啊网络营销策划书3000字
  • 怎样更改wordpress主域名英文seo外链
  • 网站图片自动切换怎么做2019网站seo
  • 站长交易网全网整合营销
  • 绥芬河网站建设网站制作过程
  • 标书制作教程视频网站百度seo关键词优化方案
  • 平顶山建设局网站sem竞价培训班
  • 个人备案后做淘客网站快速网站seo效果
  • 常州网站建设seo新手入门教程
  • 用jquery打造个性网站株洲做网站