ZBLOG

int main() { // std::launch::deferred 当执行到fu.get才开始创建线程 std::future fu = std::async(std::launch::deferred, fun, 1); std::cout

对于 std::async 的延迟执行,实际上是通过 std::launch::deferred 参数来实现的。这意味着线程函数会在调用 get() 方法时才被执行,且在主线程中执行。

如果你想要设置延迟时间,可以使用 std::this_thread::sleep_for() 来暂停当前线程的执行。例如:

#include <iostream>
#include <future>
#include <chrono>

int fun(int x) {
	x++;
	x *= 10;
	std::cout << std::this_thread::get_id() << std::endl;
	return x;
}

int main()
{
	std::future<int> fu = std::async(std::launch::deferred, fun, 1);

	// 设置延迟时间为2秒
	std::this_thread::sleep_for(std::chrono::seconds(2));

	std::cout << fu.get() << std::endl;
	std::cout << std::this_thread::get_id() << std::endl;

	return 0;
}

在这个例子中,异步任务将被延迟执行2秒钟,然后再通过 get() 方法获取结果。注意,在这种情况下,并没有创建新的线程。输出结果应该如下所示:

[主线程ID]
[主线程ID]

需要注意的是,使用 `std::launch:


内容由零声教学AI助手提供,问题来源于学员提问

本站部分文章来源于网络,版权归原作者所有,如有侵权请联系站长删除。
转载请注明出处:https://golang.0voice.com/?id=15757

分享:
扫描分享到社交APP
上一篇
下一篇
发表列表
游客 游客
此处应有掌声~
评论列表

还没有评论,快来说点什么吧~

联系我们

在线咨询: 点击这里给我发消息

微信号:3007537140

上班时间: 10:30-22:30

关注我们
x

注册

已经有帐号?