有什么办法可以知道线程创建成功还是失败?
Is there any way can know if the thread is created success or failure?
我正在使用 std::thread
创建一个线程,但看起来没有 API 可以判断此操作是成功还是失败。有什么办法可以知道这些信息吗?
见 reference std::thread
构造函数:
std::system_error
if the thread could not be started.
这是C++中的普遍做法。当构造函数失败时,您会引发异常,否则您的对象将处于尴尬的无效状态,而标准库通常会避免这种情况。
std::thread
的构造函数在失败的情况下抛出异常。
https://en.cppreference.com/w/cpp/thread/thread/thread
Exceptions 3)
std::system_error if the thread could not be started.
The exception may represent the error condition
std::errc::resource_unavailable_try_again or another
implementation-specific error condition.
现代编程语言中有两种流行的方法来确定不可靠操作是否成功。
有一个returned状态码或可读的错误码,表示操作是否成功。这是较旧的方法,在 C 程序中使用,因此 POSIX 接口中有许多使用。使用这种风格,函数和方法具有仅 尝试 执行操作的语义。在 return 上,从函数或方法中您知道已进行尝试,但不知道是否成功。
当且仅当操作失败时抛出异常。这是较新的方法,用于编写良好的 C++ 程序和 C++ 标准库。使用这种风格,函数、方法和构造函数具有做操作的语义。在 return 从函数、方法或构造函数中您知道操作已成功。
因此,在您的特定情况下,来自线程构造函数的 return 表示线程已成功创建,无需检查状态代码。
我正在使用 std::thread
创建一个线程,但看起来没有 API 可以判断此操作是成功还是失败。有什么办法可以知道这些信息吗?
见 reference std::thread
构造函数:
std::system_error
if the thread could not be started.
这是C++中的普遍做法。当构造函数失败时,您会引发异常,否则您的对象将处于尴尬的无效状态,而标准库通常会避免这种情况。
std::thread
的构造函数在失败的情况下抛出异常。
https://en.cppreference.com/w/cpp/thread/thread/thread
Exceptions 3)
std::system_error if the thread could not be started. The exception may represent the error condition std::errc::resource_unavailable_try_again or another implementation-specific error condition.
现代编程语言中有两种流行的方法来确定不可靠操作是否成功。
有一个returned状态码或可读的错误码,表示操作是否成功。这是较旧的方法,在 C 程序中使用,因此 POSIX 接口中有许多使用。使用这种风格,函数和方法具有仅 尝试 执行操作的语义。在 return 上,从函数或方法中您知道已进行尝试,但不知道是否成功。
当且仅当操作失败时抛出异常。这是较新的方法,用于编写良好的 C++ 程序和 C++ 标准库。使用这种风格,函数、方法和构造函数具有做操作的语义。在 return 从函数、方法或构造函数中您知道操作已成功。
因此,在您的特定情况下,来自线程构造函数的 return 表示线程已成功创建,无需检查状态代码。