vs2017上使用condition_variable

鑫森淼焱垚 2018-05-24 06:31:40

在vs2017上使用std::condition_variable做线程控制,执行wait_for的时候就算没有收到条件也会返回,执行输出finish,相同的代码在linux上就没问题。是需要vs做什么设置吗?代码非常简单:
#include <iostream>
#include <condition_variable>
#include <mutex>

using namespace std;

std::mutex mtx;

int main()
{
std::condition_variable cv;

std::unique_lock<std::mutex> lck(mtx);

while (cv.wait_for(lck, std::chrono::seconds(1)) == std::cv_status::timeout) {

std::cout << '.';

std::cout.flush();
}
cout << "finish" << endl;

getchar();
return 0;
}


...全文
930 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
鑫森淼焱垚 2018-05-28
  • 打赏
  • 举报
回复
引用 8 楼 zhouqunhai 的回复:
我也遇到过,但一直解决不了
我去vs官网找找,这么常见的功能为什么网上搜不到类似的问题呢?
鑫森淼焱垚 2018-05-28
  • 打赏
  • 举报
回复
引用 5 楼 u010611736 的回复:
更新一下vs
更新了,还是不行 版本是15.7.2
鑫森淼焱垚 2018-05-28
  • 打赏
  • 举报
回复
有人了解吗?或者vs增加什么设置。不用c++11的就得用win api了
鑫森淼焱垚 2018-05-28
  • 打赏
  • 举报
回复
引用 9 楼 rongrong0538 的回复:
[quote=引用 8 楼 zhouqunhai 的回复:] 我也遇到过,但一直解决不了
我去vs官网找找,这么常见的功能为什么网上搜不到类似的问题呢?[/quote] 我把代码改成了:
while (!cv.wait_for(lck, chrono::seconds(5), [&] {return isExit;})) {

		std::cout << '.';

		std::cout.flush();
	}
鑫森淼焱垚 2018-05-25
  • 打赏
  • 举报
回复
求助求助,我都不敢用wait_for了,谁知道会不会程序运行半路给跳出了。就是不想win了linux上的代码差异太多才找的c++11,这种情况应该怎么解释?需要vs编译时做什么设置吗
鑫森淼焱垚 2018-05-25
  • 打赏
  • 举报
回复
引用 2 楼 adlay 的回复:
输出一下 cv.wait_for(lck, std::chrono::seconds(1)) 的返回值, 看看跳出 while 循环那一次返回了什么值, 再去查那个返回值的意义, 为什么会那样返回.
wait_for返回的std::cv_status是个枚举,只有超时和不超时两个值,不超时表示条件被唤醒。可是这里没有线程去修改条件,循环还是会跳出。
www_adintr_com 2018-05-25
  • 打赏
  • 举报
回复
输出一下 cv.wait_for(lck, std::chrono::seconds(1)) 的返回值, 看看跳出 while 循环那一次返回了什么值, 再去查那个返回值的意义, 为什么会那样返回.
walkereklaw 2018-05-25
  • 打赏
  • 举报
回复
更新一下vs
鑫森淼焱垚 2018-05-24
  • 打赏
  • 举报
回复
谁知道这是为什么,头疼。

64,636

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧