如何在没有参数的void方法中使用std::async?
How to use std::async with void method with no parameters?
我假设 std::async
我遗漏了一些非常简单的东西。我正在尝试 运行 2 void
异步方法,没有 return 值。
#include <future>
class AsyncTestClass {
public:
void Initialize()
{
std::async(&AsyncTestClass::AsyncMethod1);
std::async(&AsyncTestClass::AsyncMethod2);
}
void AsyncMethod1()
{
//time consuming operation
}
void AsyncMethod2()
{
//time consuming operation
}
};
但是在 std:async
:
中调用我的 AsyncMethod1
或 AsyncMethod2
时出现错误
Substitution failed: type 'typename std:conditional<sizeof....(ArgTypes) == 0, std::_Invoke_traits_Zero<void, typename std::decay.....is ill formed with _Fty = void (AsyncTestClass::*)(), _ArgTypes =
std:async
与 void
无参数方法的正确用法是什么?我看到的示例似乎与我使用它的方式相似,但它不适合我。
AsyncTestClass::AsyncMethod1
是一个非静态成员函数,只有在提供 AsyncTestClass
的实例时才能调用。你可能是这个意思:
std::async(&AsyncTestClass::AsyncMethod1, this)
这将创建一个 std::future
对象,其值将通过评估 this->AsyncMethod1()
获得。
对了,std::async
的return值要赋值给一个变量,否则调用会阻塞。参见 std::async won't spawn a new thread when return value is not stored。如果你有 C++20,由于 [[nodiscard]]
.
,编译器会为你捕获这个
我假设 std::async
我遗漏了一些非常简单的东西。我正在尝试 运行 2 void
异步方法,没有 return 值。
#include <future>
class AsyncTestClass {
public:
void Initialize()
{
std::async(&AsyncTestClass::AsyncMethod1);
std::async(&AsyncTestClass::AsyncMethod2);
}
void AsyncMethod1()
{
//time consuming operation
}
void AsyncMethod2()
{
//time consuming operation
}
};
但是在 std:async
:
AsyncMethod1
或 AsyncMethod2
时出现错误
Substitution failed: type 'typename std:conditional<sizeof....(ArgTypes) == 0, std::_Invoke_traits_Zero<void, typename std::decay.....is ill formed with _Fty = void (AsyncTestClass::*)(), _ArgTypes =
std:async
与 void
无参数方法的正确用法是什么?我看到的示例似乎与我使用它的方式相似,但它不适合我。
AsyncTestClass::AsyncMethod1
是一个非静态成员函数,只有在提供 AsyncTestClass
的实例时才能调用。你可能是这个意思:
std::async(&AsyncTestClass::AsyncMethod1, this)
这将创建一个 std::future
对象,其值将通过评估 this->AsyncMethod1()
获得。
对了,std::async
的return值要赋值给一个变量,否则调用会阻塞。参见 std::async won't spawn a new thread when return value is not stored。如果你有 C++20,由于 [[nodiscard]]
.