问题描述
我正在使用 std::thread
创建一个线程,但似乎没有 API 可以判断此操作是成功还是失败。有没有办法知道这些信息?
解决方法
在现代编程语言中有两种流行的方法来确定不可靠操作的成功与否。
-
有返回状态码或可读错误码,表示操作是否成功。这是在 C 程序中使用的较旧的方法,因此它们中的许多人使用 POSIX 接口。在这种风格下,函数和方法的语义只是尝试来执行一个操作。从函数或方法返回时,您知道已经进行了尝试,但不知道是否成功。
-
当且仅当操作失败时才抛出异常。这是较新的方法,用于编写良好的 C++ 程序和 C++ 标准库。使用这种风格,函数、方法和构造函数具有执行操作的语义。从函数、方法或构造函数返回时,您知道操作已成功。
因此,在您的特定情况下,从线程构造函数返回意味着线程已成功创建,无需检查状态代码。
,请参阅 reference 以了解 std::thread
构造函数:
std::system_error
如果线程无法启动。
这是 C++ 中的一般做法。当构造函数失败时,您会引发异常,否则您的对象将处于尴尬的无效状态,这是标准库通常会避免的。
,std::thread
的构造函数在失败时抛出异常。
https://en.cppreference.com/w/cpp/thread/thread/thread
例外 3)
std::system_error 如果线程无法启动。
异常可能代表错误条件
std::errc::resource_unavailable_try_again 或其他
特定于实现的错误条件。