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

网站开发师培训产品设计专业最好的大学

网站开发师培训,产品设计专业最好的大学,揭阳网站制作多少钱,软件系统设计方案线程允许多个程序任务在统一时间执行#xff0c;不同的线程可以共享内存空间#xff0c;每个线程也有自己的栈空间。 线程类 thread 类thread表示单个执行线程。线程在thread构造对象时开始执行。每个thread对象表示唯一的一个线程#xff0c;thread不支持复制构造和复制…线程允许多个程序任务在统一时间执行不同的线程可以共享内存空间每个线程也有自己的栈空间。 线程类 thread 类thread表示单个执行线程。线程在thread构造对象时开始执行。每个thread对象表示唯一的一个线程thread不支持复制构造和复制赋值函数。 构造函数 默认的构造函数构造一个不表示任何线程的thread对象 thread() noexcept; 构造函数可以传入一个函数并关联一个执行线程构造完成后函数将在该线程上开始运行 template class F, class... Args explicit thread( F f, Args... args ); 代码示例 auto func [](int index) {for (int i 0; i 15; i){std::cout index;std::this_thread::sleep_for(std::chrono::milliseconds(10));} };std::thread t1(func, 1); std::thread t2(func, 2); t1.join(); t2.join(); std::cout std::endl; t1和t2分别在两个线程上同时执行打印出来的1和2可能是交错的可能的输出结果 122121121212121212212121212121 析构函数 销毁thread对象时必须合并或者分离底层线程否则会调用std::terminate导致程序崩溃。其内部实现大致为 ~thread() noexcept {if (joinable()) {terminate();} } 赋值函数 thread只支持移动赋值函数移动后线程的所有权被转交原thread对象不再表示任何线程。 joinable 检查线程是否可合并如果thread代表的线程是活跃的那么joinable返回true。代码示例 std::cout std::boolalpha;std::thread t; std::cout t joinable: t.joinable() std::endl; t std::thread([](){}); std::cout t joinable: t.joinable() std::endl; t.join(); std::cout t joinable: t.joinable() std::endl;输出结果 t joinable: false t joinable: true t joinable: false get_id 获取线程的id。代码示例 std::thread t1; std::thread t2 std::thread([](){}); std::thread t3 std::thread([](){});std::cout t1 id: t1.get_id() std::endl; std::cout t2 id: t2.get_id() std::endl; std::cout t3 id: t3.get_id() std::endl;t2.join(); t3.join();输出结果 t1 id: 0 t2 id: 97068 t3 id: 73212 native_handle 获取底层实现的线程句柄。代码示例 std::thread t std::thread([](){});std::thread::native_handle_type handle t.native_handle(); std::cout native handle: handle std::endl; t.join();输出结果 native handle: 00000000000000A8 hardware_concurrency 返回系统的逻辑处理线程数。代码示例 auto num std::thread::hardware_concurrency(); std::cout hardware concurrency: num std::endl;可能的输出结果 hardware concurrency: 8 join 阻塞thread代表的线程直到其执行结束。代码示例 auto Func []() {std::cout t thread std::endl;std::this_thread::sleep_for(std::chrono::seconds(1)); };std::thread t(Func); t.join(); std::cout Done std::endl;输出结果 t thread Done detach 将thread管理的线程从thread中分离thread不再代表任何线程。代码示例 auto Func []() {std::this_thread::sleep_for(std::chrono::seconds(1));std::cout Func about to end std::endl; };std::thread t(Func); t.detach(); std::cout t detach std::endl; std::this_thread::sleep_for(std::chrono::seconds(5));输出结果 t detach Func about to end swap、std::swap 交换两个thread管理的线程。 jthread 和thread类似jthread管理一个执行线程。不同的是当jthread析构时会自动合并线程。jthread内部还有一个stop_source成员stop_source包含stop_token对象jthread可以接受一个用stop_token作为首参数的函数用于执行线程访问jthread有一个request_stop接口用于修改stop_token的状态这允许执行函数根据stop_token的状态来决定是否终止函数运行。 构造函数 构造一个jthread对象并关联一个执行线程默认构造函数不关联任何线程。代码示例 auto func [](int index) {for (int i 0; i 15; i){std::cout index;std::this_thread::sleep_for(std::chrono::milliseconds(10));} };std::jthread t1(func, 1); std::jthread t2(func, 2); t1.join(); t2.join(); std::cout std::endl;输出结果 122112121212122121211212211212 析构函数 jthread对象析构时会尝试合并其管理的执行线程其内部实现大致为 ~jthread() {if (joinable()) {request_stop();join();} }赋值函数 jthread只支持移动赋值函数移动后线程的所有权被转交原jthread对象不再表示任何线程。 joinable 检查线程是否可合并如果thread代表的线程是活跃的那么joinable返回true。 get_id 获取线程的id。 native_handle 获取底层实现的线程句柄。 hardware_concurrency 返回系统的逻辑处理线程数。 join 阻塞thread代表的线程直到其执行结束。 detach 将jthread管理的线程从jthread中分离jthread不再代表任何线程。 swap、std::swap 交换两个jthread管理的线程。 停止记号处理 jthread提供了get_stop_source、get_stop_token用于获取stop_source和stop_token对象requset_stop接口用于修改stop_token状态为停止jthread关联的执行函数可以通过其第一个参数stop_token用于其状态。代码示例 auto Func [](std::stop_token token) {for (int i 0; i 10; i){if (token.stop_requested()){std::cout i token stop_requested true std::endl;}else{std::cout i token stop_requested false std::endl;}std::this_thread::sleep_for(std::chrono::milliseconds(100));} };std::jthread t(Func); std::this_thread::sleep_for(std::chrono::milliseconds(350)); t.request_stop();可能的输出结果 0 token stop_requested false 1 token stop_requested false 2 token stop_requested false 3 token stop_requested false 4 token stop_requested true 5 token stop_requested true 6 token stop_requested true 7 token stop_requested true 8 token stop_requested true 9 token stop_requested true 注意最后一行代码 t.request_stop(); 不是必须的因为对象 t 在析构时也会调用request_stop函数。 当前线程管理函数 yield 重调度线程的执行允许其他线程运行。具体效果依赖于编译器的实现。 get_id 返回当前线程的id。代码示例 auto Func []() {std::cout thread id: std::this_thread::get_id() std::endl; };std::thread t1(Func); std::thread t2(Func); Func();t1.join(); t2.join();输出结果 thread id: 22388 thread id: 79692 thread id: 85280 sleep_for 阻塞当前线程一段时间。代码示例 auto t1 std::chrono::system_clock::now(); std::this_thread::sleep_for(std::chrono::milliseconds(300)); auto t2 std::chrono::system_clock::now(); std::chrono::durationdouble, std::milli time t2 - t1; std::cout time pass: time.count() std::endl;可能的输出结果 time pass: 302.473 sleep_util 阻塞当前线程到指定的时间点。代码示例 auto t1 std::chrono::system_clock::now(); std::this_thread::sleep_until(t1 std::chrono::milliseconds(400)); auto t2 std::chrono::system_clock::now(); std::chrono::durationdouble, std::milli time t2 - t1; std::cout time pass: time.count() std::endl;可能的输出结果 time pass: 400.504
http://www.hkea.cn/news/14569432/

相关文章:

  • 朋友做的网站图片不显示不出来山西省吕梁市简介
  • wordpress网站重定向循环网站建设属于什么职能
  • 牙科网站模板手机wordpress主题
  • 深圳网站建设-中国互联如何调用wordpress函数
  • 律所网站建设国队男子接力赛成都网站关键词优化
  • 电子商务网站流程图微商做网站
  • 物流网站首页设计为什么要网站备案
  • 站酷网在线官网百度查重免费
  • 镇江网站建设推广直播网站开发源码
  • 网页图片怎么居中低价网站建设推广优化
  • vs 2012网站开发仙游网站建设公司
  • 沈阳整站优化怎么用国外的服务器做网站
  • 网站开发技术简介dw阿凡达网站建设网
  • 做网站外包wordpress5.0改进
  • 沈阳网站建设设计公司文军seo
  • 建网站什么网最好做网站建设的价格
  • 淮安网站设计如何使用家里电脑做网站服务器
  • expedia电子商务网站建设网站里的课程配图怎么做
  • 中山网站建点河北省住宅和城乡建设厅网站
  • 如何修改网站域名陕西网站设计
  • 郑州制作企业网站建设人才证书查询网站
  • 网站推广做什么建设网站需要机房吗
  • 集团公司网站建设策划经典网站源码
  • 网站制作咨询电话国外服务器地址ip
  • 广东省做农业网站销售的公司一些难以发现的网站
  • 栾城区住房建设局官方网站深圳专业做网页的公司
  • 如何做征信公司网站设计公司怎么接业务
  • 广东顺德网站建设和拓者设计吧类似的网站
  • 弹出全屏视频网站怎么做东莞网站建设17
  • 嘉兴网站建设seo电商和网站设计哪个好