Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/139.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 如何使函数只运行一分钟_C++_Time - Fatal编程技术网

C++ 如何使函数只运行一分钟

C++ 如何使函数只运行一分钟,c++,time,C++,Time,如何使函数foo只运行一段时间?我认为线程是最常见的执行方式 如何使用bind和timed_join???代码与其他代码没有冲突。代码协作完成任务。如果您只希望foo运行一分钟,请将其编码为仅运行一分钟。不要以其他方式编码,然后尝试强制它以其他方式工作,而不是以编码方式 如果要使用线程,可以编写foo代码来检查同步中止标志。如果foo注意到设置了该标志,它将中止。然后,在一分钟后,从另一个线程设置该标志。然后foo会注意到标志被设置,并自动中止 如果您需要中止诸如阻塞I/O操作之类的操作,那么解

如何使函数foo只运行一段时间?我认为线程是最常见的执行方式


如何使用bind和timed_join???

代码与其他代码没有冲突。代码协作完成任务。如果您只希望foo运行一分钟,请将其编码为仅运行一分钟。不要以其他方式编码,然后尝试强制它以其他方式工作,而不是以编码方式

如果要使用线程,可以编写foo代码来检查同步中止标志。如果foo注意到设置了该标志,它将中止。然后,在一分钟后,从另一个线程设置该标志。然后foo会注意到标志被设置,并自动中止


如果您需要中止诸如阻塞I/O操作之类的操作,那么解决方案是特定于平台的。或者您可以使用提供此类功能的便携式库,例如。

我不确定您的要求是什么。如果你只需要一个函数做一分钟的事情,你能把它包装成一个while循环吗

void foo(void)
{
    time_t end = time(NULL) + 60;
    while (time(NULL) <= end)
    {
        … // do something
    }
}
如何使函数foo只运行一段时间

POSIX pthread API支持取消,但该标准不保证立即取消。但下面的示例说明了如何在函数foo正常运行5秒后,在1秒后使用它来取消函数foo

void foo ()
{
    sleep(5);
}

void * start_foo (void *)
{
    int x;
    pthread_setcancelstate(PTHREAD_CANCEL_ENABLE, &x);
    foo();
    return 0;
}

    pthread_t t;
    pthread_create(&t, 0, start_foo, 0);
    sleep(1);
    pthread_cancel(t);
    pthread_join(t, 0);
start_foo函数启用取消状态。x参数接收旧的取消状态

如何使用bind和timed_join

我相信您指的是boost::bind和boost::thread::timed\u join。bind提供了一种机制来定义一个不接受任何参数,但调用传递参数的函数的functor。thread需要一个不带参数的函子,所以这里使用它

boost::thread t(boost::bind(puts, "hello, world"));
boost::thread::timed_join是boost::thread上的一个连接,如果线程未在传递给它的时间参数内完成,则该连接可能返回false

boost::thread t(foo);
t.timed_join(boost::posix_time::seconds(1));

福在做什么,这甚至是可取的?我想这回答了你的问题:你可能应该坚持。如果你觉得它需要更多的关注,你可以悬赏它。如果//do something语句运行20分钟,你的代码将运行20分钟。我需要每秒检查一次我的代码,所以当60秒过去时,它会从语句中中断。你明白了吗?@georgemano:然后把时间检查放在//也做点什么。你的问题太模糊了,无法具体回答。@georgemano我不知道该说什么,如果你写的代码从不循环并运行20分钟,那么你的问题就比我处理过的问题要大得多。我看到的所有长时间运行的代码本质上都是循环的网络循环、操作循环、动画循环、命令循环等等…。很抱歉,我的建议没有多大帮助。为了更好地理解这一点,一些线程API已经尝试了一个控制线程可以用来强制取消另一个线程的命令——这表面上很吸引人,但实际上,被取消的线程很容易会有一些资源堆、锁、,将永远不会被释放/解锁/关闭的文件描述符等。。许多系统和库调用都会立即删除这些资源,因此这不仅仅是扫描您自己的源代码的问题。只有在非常有限的情况下,如密集的数学计算,它才是真正安全的。现在很少有API取消了。