我想做什么:
//a.hpp
extern std::condition_variable m_condvar;
class A{
...
};
//a.cpp
void A::func()
{
if (condition)
m_condvar.notify_all();
}
...
//main.cpp
...
std::condition_variable m_condvar;
while(1){
if (m.condvar.wait_until(uLock, timePoint) == std::cv_status::timeout){
break;
}
}
我的问题是这是否是定义 m_condvar 的正确方法(a.hpp 中的 extern,在 main.cpp 中声明)?有没有更好的方法呢?
谢谢。
第一个改进,这可能是需要的:
//a.hpp
class A
{
public:
std::condition_variable m_condvar;
};
所以,至少,你没有全局对象。如果您想通知/等待单个对象,则每个对象都有一个条件变量会更好。
如果你想通知或等待一组对象,你应该为该组设置一个类,并将
condition_variable
放在那里。
拥有一个包罗万象的全局几乎总是不好的。查看关于单例的文献以及为什么它们是反模式,以了解原因。
经典的技巧是:
//header.hpp
...
#ifndef extern_
#define extern_ extern
#endif
extern_ int m_condvar;
...
和
// in the cpp
...
#define extern_
#include "header.hpp"
#undef extern_
...