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

公司网站开发项目管理制度织梦音乐网站

公司网站开发项目管理制度,织梦音乐网站,三维设计官网,国外 wordpress模板下载C多线程并发编程入门#xff08;目录#xff09; 本文用最简单易懂的实际案例#xff0c;讲清楚了 join 的实际内涵#xff0c;保证你过目不忘。 Hello join 示例 join 函数是我们接触C多线程 thread 遇到的第一个函数。 比如#xff1a; int main() {thread t(f);t.…C多线程并发编程入门目录 本文用最简单易懂的实际案例讲清楚了 join 的实际内涵保证你过目不忘。 Hello join 示例 join 函数是我们接触C多线程 thread 遇到的第一个函数。 比如 int main() {thread t(f);t.join(); }join 用来阻塞当前线程退出 join 表示线程 t 运行起来了。但是t 也阻碍了 main 线程的退出。 也就是说如果 f 的执行需要 5秒钟 main也要等待5秒才能退出。 这看起来非常合理因为 main 就应该等待 t 退出之后再退出。 main 等待所有线程 多个线程都以 join 的方式启动的时候main 就要等到最后。 比如 int main() {thread t1(f1);t1.join();thread t2(f2);t2.join(); } 假如 f1 需要执行5秒 f2 需要执行 1 秒 那么 main 就需要等待 max(5, 1) 5 秒。 整个过程中 f1 f2 各自独立运行谁运行谁的互不干涉。 执行示意图 完整示例 下面的代码main 线程 等待 first 线程 和 second 线程都退出之后再退出。 #include iostream #include thread #include chrono using namespace std; using namespace std::chrono;void first() {// simulate expensive operationstd::this_thread::sleep_for(std::chrono::seconds(5));cout first finished! endl; }void second() {// simulate expensive operationstd::this_thread::sleep_for(std::chrono::seconds(1));cout second finished! endl; }int main() {auto start std::chrono::system_clock::now();std::cout starting first helper...\n;std::thread helper1(first);std::cout starting second helper...\n;std::thread helper2(second);std::cout waiting for helpers to finish... std::endl;helper1.join();helper2.join();auto elapsed chrono::duration_castchrono::seconds(system_clock::now() - start).count();std::cout done! elapsed elapsed seconds.; }执行结果 main 等待所有线程的退出 可以看出main 确实是等待两个线程都执行完之后才退出的。 有一个细节 先执行完了 second 线程后执行完了 first 线程。 这样很正常 毕竟 second 线程耗时短1秒first 线程耗时长5秒。 所以main 等待了 5 秒钟才退出。 线程的嵌套join的弊端 实际工作中我们创建线程不大可能都在 main 函数中创建。 我们通常是在其他线程中遇到了某种事件发生这时候才知道要赶紧创建新的线程来执行某个新任务。 比如我们写了一个腾讯会议软件点击开始录制按钮的时候创建录制线程。 录制按钮的回调函数是在UI线程里执行的也就是创建录制线程并执行录制现场这件事发生在UI线程里。不在main线程里。 示例 int main() {thread ui(ui_fun);ui.join();//main等待整个窗口程序关闭再退出 }ui_fun() {thread button_clicked(on_button_clicked);//创建录制线程button_clicked.join();//执行录制动作 } 这种情况main 等待 ui 线程这没什么问题。但是 ui 等待 录制线程就会导致 ui 线程卡住。 此时你按界面上其他的按钮就不会有任何响应。这是不应该发生的。 执行示意图 main一共等待了156秒 完整示例 #include iostream #include thread #include chrono using namespace std; using namespace std::chrono;void record() {// simulate expensive operationstd::this_thread::sleep_for(std::chrono::seconds(1));cout record finished! endl; }void ui_fun() {std::cout starting record ...\n;std::thread record_thread(record);record_thread.join();// simulate expensive operationstd::this_thread::sleep_for(std::chrono::seconds(5));cout ui_fun finished! endl; }int main() {auto start std::chrono::system_clock::now();std::cout starting ui_fun ...\n;std::thread helper1(ui_fun);std::cout waiting for ui_fun to finish... std::endl;helper1.join();auto elapsed chrono::duration_castchrono::seconds(system_clock::now() - start).count();std::cout done! elapsed elapsed seconds.; }执行结果 参考 C std::thread join()的理解 - 代萌 - 博客园 (cnblogs.com) std::thread::join - cppreference.com
http://www.zqtcl.cn/news/244403/

相关文章:

  • 郑州高端网站制作wordpress那个版本好
  • wordpress屏蔽右键f12奉化首页的关键词优化
  • cn域名做犯法网站做电影网站需要哪些证
  • 官方网站有哪些韶关做网站的公司
  • 商城网站设计公司怎么样网站制作预算
  • 在济南什么人想做网站网站建设后怎么做主页
  • 联合年检怎么做网站上国家备案查询
  • 社交网站wap模板wordpress网址导航插件
  • 沈阳快速建站公司有哪些国外做二手服装网站
  • 手机如何建立网站平台seo比较好的优化
  • 电商网站建设外包禅城南庄网站制作
  • 哈尔滨企业网站开发报价免费php网站源码
  • 东莞市公司网站建设淄博网站制作营销
  • 企业网站无线端怎么做手机网站做成app
  • 让他人建设网站需要提供的材料可在哪些网站做链接
  • 外贸公司做网站3d建模好学吗
  • dedecms新网站 上传到万网的空间上海新媒体运营公司排名
  • 包装东莞网站建设0769三层网络架构
  • 淘客网站自己做固安建站公司
  • 咸阳学校网站建设联系电话网络app开发网站建设价格
  • 没网站怎么做淘宝客网站建设耂首先金手指
  • 网站带做收录排名淘外网站怎么做
  • 网站建设分金手指排名五申请邮箱账号注册
  • 餐饮加盟网站建设字体怎么安装wordpress
  • 网站建设与维护培训凡科和有赞哪个好用
  • 景区网站的作用长春新冠最新情况
  • 个人网站上传有啥要求wordpress 浏览记录
  • appcan 手机网站开发wordpress首页音乐
  • 杭州响应式网站案例建筑工程网站建站方案
  • 网站访客抓取国内网站搭建