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

html网站登陆页面模板工作室主题网站模板

html网站登陆页面模板,工作室主题网站模板,外国人做网站,天眼查官网查询企业参考引用 C11 14 17 20 多线程从原理到线程池实战代码运行环境#xff1a;Visual Studio 2019 1. 为什么要用多线程 任务分解 耗时的操作#xff0c;任务分解#xff0c;实时响应 数据分解 充分利用多核CPU处理数据 数据流分解 读写分离#xff0c;解耦合设计 2. 第一个… 参考引用 C11 14 17 20 多线程从原理到线程池实战代码运行环境Visual Studio 2019 1. 为什么要用多线程 任务分解 耗时的操作任务分解实时响应 数据分解 充分利用多核CPU处理数据 数据流分解 读写分离解耦合设计 2. 第一个子线程代码示例 first_thread.cpp#include iostream #include threadusing namespace std;// 创建的子线程的入口函数 void ThreadMain() {// 获取子线程开始时刻的 ID 号cout begin sub thread ID this_thread::get_id() endl;for (int i 0; i 5; i) {cout in thread i endl;// 子线程睡眠释放CPU 资源 1000msthis_thread::sleep_for(chrono::seconds(1)); }cout end sub thread ID this_thread::get_id() endl; }// 主线程的入口函数 main() int main(int argc, char* argv[]) {cout main thread ID this_thread::get_id() endl;// 线程创建启动thread th(ThreadMain);cout begin wait sub thread endl;// 阻塞等待子线程退出th.join();cout end wait sub thread endl;return 0; }控制台输出main thread ID 21580 begin wait sub thread begin sub thread ID 22924 in thread 0 in thread 1 in thread 2 in thread 3 in thread 4 end sub thread ID 22924 end wait sub thread3. std::thread 对象生命周期、线程等待和分离 thread_detach.cpp #include iostream #include threadusing namespace std;bool is_exit false;void ThreadMain() {cout begin sub thread ID this_thread::get_id() endl;for (int i 0; i 5; i) {if (!is_exit)break;cout in thread i endl;this_thread::sleep_for(chrono::seconds(1)); // 子线程睡眠释放CPU 资源 1000ms}cout end sub thread ID this_thread::get_id() endl; }int main(int argc, char* argv[]) {{//thread th(ThreadMain); // 出错thread 对象被销毁 子线程还在运行}{thread th(ThreadMain);th.detach(); // 子线程与主线程分离 守护线程在后台运行// 但存在一个问题主线程退出后 子线程不一定退出}{thread th(ThreadMain);this_thread::sleep_for(chrono::seconds(1));//1000msis_exit true; // 通知子线程退出cout 主线程阻塞等待子线程退出 endl;th.join(); // 主线程阻塞等待子线程退出cout 子线程已经退出 endl;}getchar();return 0; }控制台输出 begin sub thread ID 25520 end sub thread ID 25520 begin sub thread ID 23324 end sub thread ID 23324 主线程阻塞等待子线程退出 子线程已经退出4. 全局函数作为线程入口 thread_para.cpp #include iostream #include thread #include stringusing namespace std;class Para { public:Para() {cout Create Para endl;}Para(const Para p) { // 拷贝构造函数cout Copy Para endl; }~Para() {cout Drop Para endl;}string name; };void ThreadMain(int p1, float p2, string str, Para p4) {this_thread::sleep_for(100ms);cout ThreadMain p1 p2 str p4.name endl; }int main(int argc, char* argv[]) {thread th;{float f1 12.1f;Para p;p.name test Para class;// 所有的参数做复制th thread(ThreadMain, 101, f1, test string para, p);}th.join();return 0; }控制台输出 Create Para Copy Para Drop Para Copy Para ThreadMain 101 12.1 test string para Drop Para Drop Para5. 线程函数传递指针和引用 参数传递存在的问题 传递空间已经销毁多线程共享访问一块空间传递的指针变量的生命周期小于线程 thread_para.cpp #include thread #include iostream #include stringusing namespace std;class Para { public:Para() { cout Create Para endl; }Para(const Para p) { cout Copy Para endl; }~Para() { cout Drop Para endl; }string name; };void ThreadMain(int p1, float p2, string str, Para p4) {this_thread::sleep_for(100ms);cout ThreadMain p1 p2 str p4.name endl; }void ThreadMainPtr(Para* p) {this_thread::sleep_for(100ms);cout ThreadMainPtr name p-name endl; }void ThreadMainRef(Para p) {this_thread::sleep_for(100ms);cout ThreadMainPtr name p.name endl; } int main(int argc, char* argv[]) {{// 传递引用Para p;p.name test ref;thread th(ThreadMainRef, ref(p));th.join();}getchar();{// 传递线程指针Para p;p.name test ThreadMainPtr name;thread th(ThreadMainPtr, p); th.detach(); // 错误线程访问的 p 空间会提前释放}getchar(); // Para 释放{ // 传递线程指针Para p;p.name test ThreadMainPtr name;thread th(ThreadMainPtr, p);th.join();getchar();}thread th;{float f1 12.1f;Para p;p.name test Para class;// 所有的参数做复制th thread(ThreadMain, 101, f1, test string para, p);}th.join();return 0; }控制台输出Create Para ThreadMainPtr name test ref Drop Para6. 成员函数作为线程入口–封装线程基类接口 XThread.h 封装线程基类接口 #pragma once#include iostream #include threadclass XThread { public:virtual void Start() {is_exit_ false;th_ std::thread(XThread::Main, this);}virtual void Stop() {is_exit_ true;Wait();}virtual void Wait() {if (th_.joinable())th_.join();}bool is_exit() {return is_exit_;}private:virtual void Main() 0; // 纯虚函数必须要在基类中实现std::thread th_;bool is_exit_ false; // 符合谷歌代码风格私有成员变量后缀加 _ };thread_class.cpp #include iostream #include thread #include string #include XThread.husing namespace std;/* class MyThread { public:// 入口线程函数void Main() {cout MyThread Main name : age;}string name;int age 0; }; */class TestXThread : public XThread { public:void Main() override {cout TestXThread Main begin endl;while (!is_exit()) {this_thread::sleep_for(100ms);cout . flush; // 添加 flush 是为了确保 . 正常输出}cout \nTestXThread Main end endl;}string name; };int main(int argc, char* argv[]) {TestXThread testth;testth.name TestXThread name ;testth.Start();this_thread::sleep_for(3s);testth.Stop();testth.Wait();getchar();/*MyThread myth;myth.name Test name;myth.age 20;thread th(MyThread::Main, myth);th.join();*/return 0; }控制台输出 TestXThread Main begin ............................ TestXThread Main end7. lambda 临时函数作为线程入口 lambda 函数基本格式 [捕捉列表] (参数) mutable - 返回值类型 {函数体} thread_lambda.cpp #include iostream #include thread #include stringusing namespace std;class TestLambda { public:void Start() {thread th([this]() {cout name name endl; });th.join();}string name Test Lambda; };int main(int argc, char* argv[]) {thread th([](int i) {cout test lambda i endl;}, 123);th.join();TestLambda test;test.Start();return 0; }控制台输出 test lambda 123 name Test Lambda8. call_once 多线程调用函数只进入一次 初始化函数可以在每一个类型的构造里都调用一遍不用明确区分代码可读性提升 call_once.cpp #include iostream #include thread #include string #include mutexusing namespace std;void SystemInit() {cout Call SystemInit endl; }void CallOnceSystemInit() {static std::once_flag flag; // 通过 flag 区分是否只调用一次std::call_once(flag, SystemInit); }int main(int argc, char* argv[]) {CallOnceSystemInit();CallOnceSystemInit();for (int i 0; i 3; i) {thread th(CallOnceSystemInit);th.detach();}getchar();return 0; }控制台输出 Call SystemInit
http://wiki.neutronadmin.com/news/374411/

相关文章:

  • 建设银行金山支行网站邢台建一个网站多少钱
  • 教师网站建设企业实践总结地图上如何添加自己公司的地址
  • 广州网站seo今天济南刚刚发生的新闻
  • 长春火车站电话人工服务网页特效源码网站
  • 我想在阿里巴巴网站开店 怎么做深圳物流公司排名
  • 上海的网站设计公司价格做电商与做网站的区别
  • 什么网站做设计可以赚钱佛山骏域网站建设
  • 惠州手机网站商城建设h5响应式 wordpress
  • 物流信息网站建设南宁网站seo排名优化
  • 做网站起什么题目简述网站的建设流程图
  • 表格做网站抚州公司做网站
  • 商务网站开发设计gta5买房子网站建设
  • 快消品网站建设seo服务器
  • 教育主管部门建设的专题资源网站网站开发去哪里找程序员
  • 自己建的网站有乱码郑州全网营销
  • h5平台网站开发网络系统安全原则
  • 漳州网站开发制作棋牌h5动画用什么软件做
  • 和coser做网站网站建设找业主签字模板
  • js判断是手机还是电脑访问网站软件开发培训就业
  • 嘉兴网站建设wmcn建设电子商务网站的方案
  • 怎么把服务器做网站品牌塑造的六个步骤
  • 网站建设规划书范文wordpress 折叠
  • 外贸型网站的特点手机app制作流程图
  • 网站从建设到上线流程图wordpress文章前添加图标
  • 绵阳高端网站建设商业网站建设试题
  • 泰州做网站 泰公网络科技公司网站做闪电电磁
  • 网站注册页面怎么做数据验证软件开发商有哪些
  • 网站展示重点网站关键词如何选取
  • 做视频网站公司要怎么做的海南建设大厅网站
  • 抄袭网站怎么办无人区高清免费网页直播