C++11多线程std::future的其他成员函数wait_for等待一定的时间。
系列文章目录
前言
std::future的其他成员函数:
std::future的用法:参考连接
https://blog.csdn.net/weixin_55491446/article/details/129695136?spm=1001.2014.3001.5501
主要内容:
(1)get()函数转移数据;
(2)wait_for(等待一定的时间)。
持续更新中。
一、wait_for()的用法
wait_for(等待一定的时间)
//执行一个异步线程
std::future<int> result = std::async(std::launch::deferred, mythread);
//等待异步线程几秒
std::future_status status = result.wait_for(std::chrono::seconds(4));
三种返回结果:
- 超时:我想等待你1秒钟,希望你返回,你没有返回,那么
status = timeout
;
status == std::future_status::timeout
- 完成:表示线程成功返回;
status == std::future_status::ready
- 延迟:如果async的第一个参数被设置为
std::launch::deferred
,则本条件成立
status == std::future_status::deferred
二、使用步骤
2.1 代码示例1
这里设置线程执行5秒,等待线程6秒。
#include <stdio.h>
#include <tchar.h>
#include <iostream>
#include <vector>
#include <string>
#include <map>
#include <thread>
#include <list>
#include <mutex>
#include <future>
using namespace std;
int mythread()
{
cout << "mythread() start" << " threadid = " << std::this_thread::get_id() << endl; //新线程id
std::chrono::milliseconds dura(5000); //订一个5秒的时间
std::this_thread::sleep_for(dura); //休息了一定时长
cout << "mythread() end" << " threadid = " << std::this_thread::get_id() << endl;
return 5;
}
int main()
{
//一:std::future的其他成员函数,get()函数转移数据
cout << "main" << " threadid = " << std::this_thread::get_id() << endl;
std::future<int> result = std::async(mythread);
//线程并不会卡在这里
//std::future<int> result = std::async(std::launch::deferred, mythread);
cout << "continue...!" << endl;
//cout << result.get() << endl;
//卡在这里等待线程执行完,
//但是这种get因为一些内部特殊操作,不能get多次,只能get一次
//枚举类型:
//wait_for(等待一定的时间)
std::future_status status = result.wait_for(std::chrono::seconds(6));
//等待1秒
if (status == std::future_status::timeout)
//超时:我想等待你1秒钟,希望你返回,你没有返回,那么status = timeout
{
//表示线程还没执行完;
cout << "超时,线程还没有执行完毕" << endl;
}
else if (status == std::future_status::ready)
{
//表示线程成功返回
cout << "线程成功执行完毕,返回" << endl;
cout << result.get() << endl;
}
else if (status == std::future_status::deferred)
{
//如果async的第一个参数被设置为std::launch::deferred,则本条件成立
cout << "线程被延迟执行" << endl;
cout << result.get() << endl;
}
cout << "I Love China!" << endl;
return 0;
}
运行截图1:
2.2 代码示例2
这里设置线程执行5秒,等待线程4秒。
修改函数参数:
//wait_for(等待一定的时间)
std::future_status status = result.wait_for(std::chrono::seconds(4));
运行截图2:
总结
了解wait_for(等待一定的时间)的使用;
持续更新中…
这篇好文章是转载于:学新通技术网
- 版权申明: 本站部分内容来自互联网,仅供学习及演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,请提供相关证据及您的身份证明,我们将在收到邮件后48小时内删除。
- 本站站名: 学新通技术网
- 本文地址: /boutique/detail/tanhgcbbec
系列文章
更多
同类精品
更多
-
photoshop保存的图片太大微信发不了怎么办
PHP中文网 06-15 -
《学习通》视频自动暂停处理方法
HelloWorld317 07-05 -
word里面弄一个表格后上面的标题会跑到下面怎么办
PHP中文网 06-20 -
Android 11 保存文件到外部存储,并分享文件
Luke 10-12 -
photoshop扩展功能面板显示灰色怎么办
PHP中文网 06-14 -
微信公众号没有声音提示怎么办
PHP中文网 03-31 -
excel下划线不显示怎么办
PHP中文网 06-23 -
excel打印预览压线压字怎么办
PHP中文网 06-22 -
TikTok加速器哪个好免费的TK加速器推荐
TK小达人 10-01 -
怎样阻止微信小程序自动打开
PHP中文网 06-13