C++里Sleep()函数问题

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C++里Sleep()函数问题相关的知识,希望对你有一定的参考价值。

int numMarker = markCapture.m_markers.size();
if (numMarker>0 )


for (int i=0; i<numMarker; i++)

if(std::bitset<10>(markCapture.m_markers[0].m_id)== 901)
printf("-----------------");
Sleep(2000);




整个函数式套在while(1)的循环体里面的,遇到的问题是,当我触发让std::bitset<10>(markCapture.m_markers[0].m_id)==901时,程序会打印两次,sleep前打印一次,然后消耗掉2000毫秒后 又打印了一次。求指教!

printf打印的条件,需要满足:

    numMaker大于0        if (numMarker>0 )

    i变量小于numMaker的值     for (int i=0; i<numMarker; i++)

    m_id等于901      if(std::bitset<10>(markCapture.m_markers[0].m_id)== 901)

你检查一下自己的代码,当第一次打印之后,上面的3个条件是否发生了变化(第2个条件会变化,因为有i++),发生了变化以后,上面3个条件是否还成立。如何3个条件还成立,必然会继续打印的。

追问

发生变化后numMarker=0,,m_id=null;,三个条件都不成立,但是它仍然打印一次!

追答

>>> 发生变化后numMarker=0,,m_id=null;,

你的代码里,没有指令修改掉number和m_id呀
如果numberMaker是2的话,会再for循环中执行两次。

另外,提示你因为Sleep会堵塞线程,有的时候print的输出不一定会打印出来。(即有可能打印的不是本次的printf内容)建议你在printf后面增加\n\r试试。

参考技术A 你这段是在while里,那循环一次numMarker会减吗?
不减的话那每次循环都能执行到if里,那每次都会打印,不会只有两次
把循环全部代码截图来看看吧追问

是这样的,我的程序在不用sleep之前是会一直输出的,我加了个sleep想让程序再输出第一次后挂起两秒。结果是输出一次等待两秒后程序又进行了第二次输出,544517646我的QQ,如果您不忙,可以加我QQ谈吗?

追答

挂起两秒循环并没有退出,当然会继续输出啊

本回答被提问者采纳
参考技术B 你忘了 break追问

break加哪?加上去会让我的程序退出的!

以上是关于C++里Sleep()函数问题的主要内容,如果未能解决你的问题,请参考以下文章

使用c++在mac上使用sleep函数告诉程序等待0.1毫秒

C++ 中的睡眠函数

在C++里执行VBS 如何执行VBS命令啊 比如Wscript.Sleep 5000 '

C++睡眠延时函数 Sleep() usleep()(windows.hunistd.h)

大神的代码里看到个 Thread.Sleep,写的bug?

新线程导致问题 C++