gpt4 book ai didi

c++ - GCC 4.9.2/GCC 4.8.1 - std::condition_variable::wait_until(...) 错误?

转载 作者:搜寻专家 更新时间:2023-10-31 01:40:08 25 4
gpt4 key购买 nike

我对 c++11 条件变量上的 wait_until 方法有疑问。看起来方法返回 std::cv_status::no_timeout 即使没有通知。下面的代码显示了这个问题。

下面的代码中有注释说明了这个问题。

使用的编译器:gcc 4.9.2(在 arch 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);
}

最佳答案

您可能需要构建具有线程支持的可执行文件。在带有 gcc 4.9.2 的 Linux 上,这将是这样的:

g++ -std=c++11 test.cpp -o test -pthread

关于c++ - GCC 4.9.2/GCC 4.8.1 - std::condition_variable::wait_until(...) 错误?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30145605/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com