Data_condition等待无效参数错误
data_condition wait invalid argument error
data_cond.wait(lk, [this]{return !data_queue.empty();});
用
编译后的无效参数
g++ -std=c++0x -Wall -pthread threadpool.cc -o hello
源自book is
data_cond.wait(lk, []{return !data_queue.empty();});
这看起来很像我的书中的代码:c++并发操作,特别是缺少[this]
捕获(一个打字错误将在最终打印中修复)。
不幸的是,在g++ 4.5和4.6中有一个bug,编译器不能处理类模板中带有[this]
捕获的lambdas。这甚至适用于简单模板。您可以通过下面的简单类看到问题:
struct X
{
int i;
void foo() {
[this] { ++i; };
}
};
template<typename T>
struct Y
{
T i;
void foo() {
[this] { ++i; };
}
};
g++ 4.5和g++ 4.6都会在Y::foo
的lambda上给出"无效类型参数"错误,但在X::foo
中很高兴接受相同的代码。
希望这将在g++的未来版本中修复。同时,我建议在wait
调用周围使用显式:
while(data_queue.empty())
{
data_cond.wait(lk);
}
除非data_queue
是当前类实例的非静态数据成员,并且您是从非静态类方法调用这行代码,否则没有必要尝试捕获this
指针。如果您试图在函数内部调用代码,该函数是独立的独立函数或静态类方法,则不会捕获任何this
指针,并且您将以无效参数错误告终。你所引用的书使用无状态lambda(即括号内没有捕获的变量)这一事实对我来说意味着你正在尝试执行一个操作,这要么是不必要的,要么是不可能的,这取决于代码的上下文。
相关文章:
- C++声明模板参数阴影模板参数错误
- 为什么 CRTP 模板C++给出无效参数错误?
- (C/C++)fscanf_s从txt文件以字符形式读取数组时缺少整数参数错误
- 参数错误可能与类型不匹配有关?
- printf 和 strftime 的参数错误无效
- 如何修复"ctypes"。参数错误:参数 2:<键入"异常.类型错误">:RaspberryPi 中的错误类型"错误
- 如何修复"没有重载函数需要 2 个参数"错误C++
- 术语不计算为函数采用 1 个参数错误?
- 从带有 getline() 的文件读入一行上有多个信息得到无效参数错误
- 为什么我不能像使用 std::string::size_type 那样使用 QList::size_type?(模板参数错误)
- cudaFreeHost() 无效参数错误
- 精神语法不会编译:函数模板参数错误?
- C 功能具有参考参数错误的迭代器错误.寻求解释
- 使用getDefaultCommConfig使用无效的参数错误
- C++ 可变参数模板和模板模板参数:错误:模板参数列表中参数 1 处的类型/值不匹配
- 使用SWIG生成的Python库时,向量分配器参数错误
- 错误C2664:无法转换参数错误
- C 作为参数错误的功能
- 命令行参数错误
- 增强Python参数错误