【发布时间】:2012-12-19 04:41:12
【问题描述】:
我想知道是否有一种方法可以毫无例外地使用std::thread,如果没有,我可以使用哪些替代方法?
实际上我的目标是 windows 和 linux 桌面,但将来可能会扩展。
edit: 仅使用编译器选项来禁用异常不是可接受的解决方案。错误必须以一种或另一种方式处理。
问题是我的代码中使用的唯一异常是那些处理std::thread 错误的异常。我想摆脱那些拥有无异常代码的人
edit2:我找到了 tinythread++ 库,如果需要,它似乎很容易修改并且可以正常工作。
【问题讨论】:
-
只要你在调试你的项目,你就可以使用这些异常。之后,您可以假设不会抛出任何异常,因为异常将表明意外的环境变化。
-
真正的问题是你假设创建一个线程总是成功的。通常情况也是如此,但通常这是一个错误的假设。它可能异常失败。这就是为什么
std::thread必须 在其构造函数中有异常的原因,这是传达失败的唯一有效方式(detach和jointhrowing,OTOH,是牛,这些应该assert,因为加入不可加入的线程不是“异常失败”,这是一个编程错误)。不过,正如 Luke B 建议的那样,如果您不喜欢异常,请关闭它们。 -
“仅仅使用编译器选项来禁用异常,不是一个可以接受的解决方案” 所以使用异常。您基本上要求禁用 C++ 语言的一部分,但仍使用 C++ 语言。
标签: c++ multithreading exception c++11