我对c ++ 11条件变量上的wait_until方法有问题。看起来该方法返回std :: cv_status :: no_timeout,即使没有通知也是如此。下面的代码显示了问题。
下面的代码中有注释说明问题。
使用的编译器:gcc 4.9.2(在linux上) gcc 4.8.1(在ubuntu 14.04上)
我很高兴能得到任何帮助来解决这个问题。
最佳标志, 垫
#include <iostream>
#include <atomic>
#include <condition_variable>
#include <mutex>
#include <thread>
#include <chrono>
std::mutex m;
std::condition_variable v;
void test_wait_until(int ms)
{
std::unique_lock<std::mutex> lock(m);
std::cout << ms << "ms start\n";
auto expires = std::chrono::system_clock::now() + std::chrono::milliseconds(ms);
bool run = true;
do
{
// This loop will run at 100% cpu time until
// the timeout expires.
auto status = v.wait_until(lock, expires);
if(status == std::cv_status::timeout){
std::cout << ms << "ms expired\n";
run=false;
}
if(status == std::cv_status::no_timeout){
// If the commend below is removed the
// termial will be filled by the printout.
// until the timeout expires.
//std::cout << ms << "ms did not expire\n";
}
}while(run);
}
int main()
{
test_wait_until(20000);
test_wait_until( 5000);
test_wait_until( 100);
test_wait_until( 100);
test_wait_until( 10);
test_wait_until( 0);
test_wait_until( -10);
test_wait_until( -100);
test_wait_until( -100);
test_wait_until( -5000);
test_wait_until(-20000);
}
答案 0 :(得分:4)
您可能需要使用线程支持来构建可执行文件。在使用gcc 4.9.2的Linux上,这将是这样的:
g++ -std=c++11 test.cpp -o test -pthread