我应该使用来自C++标准还是来自 Windows API 的条件变量?
Should I use condition variables from the C++ standard or from the Windows API?
在将条件变量实现到 Win32C++程序中时,使用 Win32 函数、类和数据类型(例如CreateThread
、SleepConditionVariableCS
、WaitForSingleObjectEx
、ReleaseMutex
、CONDITION_VARIABLE
)或来自C++11标准库(例如thread
、wait
、join
、unlock
、condition_variable
)?
由于这个问题的答案可能不是二元的,那么在做出这样的决定时应该考虑哪些因素?
C++同步机制旨在C++原则。它们释放析构函数中的资源,并且还使用 RAII 来确保安全锁定。他们使用异常来发出错误信号。
从本质上讲,它们比基于函数的本机Windows API更难错误地使用。这意味着,如果您可以使用它们(您的实现支持它们),则应始终使用它们。
哦,它们是跨平台的。
一个考虑因素应该是编译器可以处理的内容。例如,当您在Windows上安装MinGW时,您可以选择是安装POSIX线程的API还是Win32线程的API。另一方面,如果使用 TDM-GCC,则应注意版本 4.7.1 及更低版本使用 Win32 线程,而版本 4.8.1 及更高版本使用 POSIX 线程。正如上面提到的,如果你使用的是Microsoft的编译器,你应该检查它对这些类的支持中的错误是否已经解决。
如果您的编译器支持 POSIX 线程,则可以使用标准库的C++线程类(例如thread
、mutex
、condition_variable
)。如果编译器支持 Win32 线程,则可以使用 Win32 线程函数。
就我而言,我最初拥有TDM-GCC 4.7.1并尝试使用C++标准库类,但这不起作用(由于上述原因)。所以我自己安装了MinGW,并在安装程序的"线程"选项中选择"posix"。然后我就可以使用这些类了。
- 为什么"do while"循环不断退出,即使条件计算结果为 false?
- 用于访问容器<T>数据成员的正确 API
- 在没有太多条件句的情况下,我如何避免被零除
- 如何使用Luacneneneba API正确读取字符串和表参数
- C++MySQL C api用户输入行
- 基于多个条件处理地图中的所有元素
- 条件constexpr函数
- 无论条件是否为true,if总是在c++中执行
- 我可以使用条件运算符初始化C风格的字符串文字吗
- 基于模板值的条件变量
- 如何使用 AWS Transcribe C++ API 中的'StartTranscriptionJobRequest'?
- 将std::string传递给WriteConsole API
- EvtExportLogneneneba API正在将远程计算机的事件日志保存到远程PC本身.如何将其保存到主机
- 多个If语句与使用逻辑运算符计算条件的单个语句的比较
- 将按位if条件转换为普通if条件
- 条件断点在不应该触发时触发
- 在gtest.中使用fff.h模拟系统API
- 如何在不弄乱库 API 的情况下实现条件编译?
- 我应该使用来自C++标准还是来自 Windows API 的条件变量?
- 当类在某些条件下无法运行时,如何禁用类API