相关疑难解决方法(0)

C++中的睡眠功能

是否有一个函数Sleep(time);暂停程序X毫秒,但在C++?

我应该添加哪个标题以及函数的签名是什么?

c++

59
推荐指数
7
解决办法
23万
查看次数

隐式声明函数usleep

gcc (GCC) 4.6.3
c89
Run Code Online (Sandbox Code Playgroud)

我正在尝试使用usleep.但是,我一直收到以下警告:

隐式声明函数usleep

我已经包含了unistd.h头文件.

手册页提到了这个问题.但我不确定我理解它:

usleep():
   Since glibc 2.12:
       _BSD_SOURCE ||
           (_XOPEN_SOURCE >= 500 ||
               _XOPEN_SOURCE && _XOPEN_SOURCE_EXTENDED) &&
           !(_POSIX_C_SOURCE >= 200809L || _XOPEN_SOURCE >= 700)
   Before glibc 2.12:
       _BSD_SOURCE || _XOPEN_SOURCE >= 500 || _XOPEN_SOURCE && _XOPEN_SOURCE_EXTENDED
Run Code Online (Sandbox Code Playgroud)

但不确定我对上述内容做了什么?

c usleep

24
推荐指数
4
解决办法
4万
查看次数

停止长睡眠线程

假设我有一个线程,应该定期执行一些任务,但这个时期是 每小时6次每小时12次(每5分钟),我经常看到用一个is_running标志控制线程循环的代码,每个循环检查一次,如下所示:

std::atomic<bool> is_running;

void start()
{
    is_running.store(true);
    std::thread { thread_function }.detach();
}

void stop()
{
    is_running.store(false);
}

void thread_function()
{
    using namespace std::literals;
    while (is_running.load())
    {
        // do some task...
        std::this_thread::sleep_for(5min);
    }
}
Run Code Online (Sandbox Code Playgroud)

但是,如果stop()函数被调用,比如说,start()在线程处于活动状态之后1毫秒,直到它唤醒299999毫秒,检查标志并死掉.

我的理解是否正确?如何避免保持活着(但是睡觉)应该已经结束的线程?到目前为止,我最好的方法如下:

void thread_function()
{
    using namespace std::literals;
    while (is_running.load())
    {
        // do some task...
        for (unsigned int b = 0u, e = 1500u; is_running.load() && (b != e); ++b)
        {
            // 1500 * 200 = 300000ms = 5min …
Run Code Online (Sandbox Code Playgroud)

c++ multithreading thread-sleep c++11

24
推荐指数
2
解决办法
8579
查看次数

usleep()在C中实现为忙等待吗?

我正在构建一个多线程应用程序,pthreads需要一个线程来定期检查一些东西.在此线程之间的时间内不应使用任何CPU.这有可能usleep()吗?是usleep()不是在忙着等待?或者有更好的解决方案吗?

c posix

13
推荐指数
4
解决办法
2万
查看次数

相当于C++的window.setTimeout()

在javascript中有这个甜蜜,甜蜜的功能window.setTimeout( func, 1000 ) ;,它将在1000毫秒后异步调用func.

我想在C++中做类似的事情(没有多线程),所以我把一个示例循环放在一起,如:

    #include <stdio.h>

    struct Callback
    {
      // The _time_ this function will be executed.
      double execTime ;

      // The function to execute after execTime has passed
      void* func ;
    } ;

    // Sample function to execute
    void go()
    {
      puts( "GO" ) ;
    }

    // Global program-wide sense of time
    double time ;

    int main()
    {
      // start the timer
      time = 0 ;

      // Make a …

c++ function execution void-pointers

7
推荐指数
2
解决办法
1万
查看次数

如何使用 cv2.VideoWriter 输出 x265 压缩视频

我正在对 45 分钟 1.2GB 视频 80,0000 帧大小为 1344x756 的视频进行一些渲染,并且视频采用 mp4 格式,我正在尝试使用 x265 压缩输出视频问题是当我使用时cv2.VideoWriter 10 分钟的视频输出大小超过 2GB,这不是我想要的结果,所以我在 mac osx 和 ubuntu 18 上尝试了以下操作:

codec = cv2.VideoWriter_fourcc(*'HEVC')
out = cv2.VideoWriter('output.mp4', 'HEVC', fps, (width, height))
Run Code Online (Sandbox Code Playgroud)

我得到的只是运行时警告:

OpenCV: FFMPEG: tag 0x43564548/'HEVC' is not found (format 'mp4 / MP4 (MPEG-4 Part 14)')'
Run Code Online (Sandbox Code Playgroud)

我想要实现的不一定是最高质量的输出,而应该是高质量和尽可能小的尺寸。

opencv rendering codec python-3.x

6
推荐指数
1
解决办法
2080
查看次数

需要更好的等待解决方案

最近我一直在用C++编写一个程序来ping三个不同的网站,然后根据通过或失败,它会在再次尝试之前等待5分钟或30秒.

目前我一直在使用ctime库和以下函数来处理我的等待.但是,根据我的CPU仪表,这是一个不可接受的解决方案.

void wait (int seconds)
{
   clock_t endwait;
   endwait = clock () + seconds * CLOCKS_PER_SEC;
   while (clock () < endwait) {}
}
Run Code Online (Sandbox Code Playgroud)

这个解决方案不可接受的原因是因为根据我的CPU仪表,程序在等待时运行在我CPU的48%到50%之间.我有一个Athlon 64 x2 1.2 GHz处理器.我的适度130线计划甚至不可能接近50%.

如何更好地编写我的等待函数,以便它只使用最少的资源?

c++ time-wait

3
推荐指数
2
解决办法
4181
查看次数

如何暂停Boost单元测试?

我正在为我创建的计时器编写一个单元测试,并且遇到了我经常遇到的其他项目的问题.我想创建一个单元测试,启动我的计时器,等待片刻,然后在计时器运行后检查我的计时器的值.然后我可以测试我的计时器中的所有功能.

有没有办法做到这一点?我在文档中没有看到任何内容.如果这不是一个好习惯,请告知我应该做什么.

c++ boost unit-testing

1
推荐指数
1
解决办法
549
查看次数

有人可以给我一个关于这个功能的解释吗?

我一直想要一个暂停功能,我找到了这个.作为C的初学者,我不能肯定,但它看起来像是来自的功能<clock.h>.我想将它实现到我的代码中,但不是没有理解它.

void wait(int seconds){
    clock_t start, end;
    start = clock();
    end = clock();
    while (((end-start) / CLOCKS_PER_SEC) = !seconds)
        end = clock();
}
Run Code Online (Sandbox Code Playgroud)

c

1
推荐指数
1
解决办法
165
查看次数

打印每(N)秒的程序

我写了一个程序,每隔五秒就会在十秒钟的时间内打印一个随机数(1-10).但它似乎每五秒打印一个以上的随机数.有人能指出我正确的方向吗?

clock_t start;

int random;

start = clock();

while (float(clock() - start) / CLOCKS_PER_SEC <= 10.0) {
    if (fmod(float(clock() - start) / CLOCKS_PER_SEC, 5) == 0 && (float(clock() - start) / CLOCKS_PER_SEC) != 0) {
        random = rand() % 10 + 1;
        cout << random << endl;
    }
}


return 0;
Run Code Online (Sandbox Code Playgroud)

c++ clock

1
推荐指数
2
解决办法
104
查看次数

不工作的数组循环

为什么这不起作用.我只想加载效果.我刚刚编译了g ++编译器的代码.这需要时间,只需打印* * * B R E A K * * *.每个字母之间没有区别.

#include <iostream>
using namespace std;

int main()
{
    int wait = 1000000000;
    char text[] = {"* * * B R E A K * * *"};

    for(int i = 0; i < 21; i++)
    {
        cout << text[i];

        for(int j = 0; j < wait; j++)
            ;
    }
}
Run Code Online (Sandbox Code Playgroud)

c++

0
推荐指数
1
解决办法
60
查看次数