C++ pimpI 互斥体阻止使用 std::condicition_variable
C++ pimpI mutex preventing usage of std::condicition_variable
C++/CLI 已知会在使用 -clr:pure 或 clr 标志编译项目时阻止互斥锁 header。
这里报错
https://social.msdn.microsoft.com/Forums/vstudio/en-US/d4d082ff-ce43-478d-8386-0effed04b108/ccli-and-stdmutex?forum=vclanguage
推荐的解决方案似乎是使用 pimpI
模式。看这里
我看到的问题是在使用其他 std
函数时。
例如考虑 std::condition_variable
mutexPimpI _mut;
std::unique_lock<mutexPimpI> lk(_mut); //Fine std::unique_lock is templated.
std::condition_variable _gate1;
_gate1.wait(lk); //Error wait expects std::unique_lock<std::mutex> as argument
有什么简单的方法可以解决/解决这个问题吗?
您可以尝试使用 recursive__mutex class 因为对象不会被锁定。
https://msdn.microsoft.com/en-us/library/hh921466.aspx 也参考这个。
我通过前向声明std::condition_variable解决了它。
Visual Studio 的互斥包含编译器的问题仅适用于 headers。
包含在源文件中仍然有效。
C++/CLI 已知会在使用 -clr:pure 或 clr 标志编译项目时阻止互斥锁 header。 这里报错 https://social.msdn.microsoft.com/Forums/vstudio/en-US/d4d082ff-ce43-478d-8386-0effed04b108/ccli-and-stdmutex?forum=vclanguage
推荐的解决方案似乎是使用 pimpI
模式。看这里
我看到的问题是在使用其他 std
函数时。
例如考虑 std::condition_variable
mutexPimpI _mut;
std::unique_lock<mutexPimpI> lk(_mut); //Fine std::unique_lock is templated.
std::condition_variable _gate1;
_gate1.wait(lk); //Error wait expects std::unique_lock<std::mutex> as argument
有什么简单的方法可以解决/解决这个问题吗?
您可以尝试使用 recursive__mutex class 因为对象不会被锁定。 https://msdn.microsoft.com/en-us/library/hh921466.aspx 也参考这个。
我通过前向声明std::condition_variable解决了它。 Visual Studio 的互斥包含编译器的问题仅适用于 headers。 包含在源文件中仍然有效。