永无止境的功能问题

时间:2010-04-13 18:50:37

标签: c++

我试图运行一个永远不会结束的功能(直到程序被杀)

我如何启动这样的功能并能够继续执行该功能,因为目前程序不会超过永无止境的功能。

此致

5 个答案:

答案 0 :(得分:10)

你需要开始一个新线程。给定的线程一次只能执行一个函数。因此,如果您希望同时执行两个单独的函数,则需要多个线程。您需要研究多线程编程。如果您使用的是Linux或其他基于unix的系统,那么要查看的库将是pthreads。

答案 1 :(得分:2)

虽然我同意其他所有人认为线程可能是最简单的方法,但这种情况听起来并不像是应该发生的事情(至少不是故意的) - 这听起来像是源于设计问题

为什么你需要一个永远运行的功能吗?这个功能有什么作用?可能有更合适的编程模型,例如Windows服务或守护进程。此外,通常最好向线程发送一个结束时间的信号,并让线程做到这一点,直到收到这样的消息(而不是在应用程序退出时强行杀死它)。

我不太了解你在这里想做什么,但我建议检查你的设计,看看是否有更好的方法。

答案 2 :(得分:1)

在线程中将其关闭。但是,允许函数退出仍然是明智的。

答案 3 :(得分:1)

执行“过去”永无止境的功能是不可能的(如果它没有结束,你就不能超越它)。我假设您希望在后台循环中运行一些代码,而程序会执行其他操作。

你想要这样的东西:

#include <pthread.h>

int endLoop;

void* backgroundLoop(void* arg) {
    while (!endLoop) {
        ...
    }
    return NULL;
}

int main (int argc, char** argv) {
    pthread_t thread;
    int retval;
    ...
    // Launch background thread
    endLoop = 0;
    retval = pthread_create(&thread, NULL, backgroundLoop, NULL);

    // Continue with main function
    ...
    // Force background loop to end
    endLoop = 1;

}

如果您使用的是pthread,则可以找到更多信息here。如果您正在使用其他一些线程库,概念将类似,但线程创建/销毁功能可能看起来不同。

答案 4 :(得分:-1)

基于类似问题的伪线程的想法我需要修复而不进行线程化(可能适用于您也可能不适用):

  1. 启动该应用程序。
  2. 当它到达函数应该运行的位置时,调用计时器启动(非常短的时间)。
  3. 计时器回叫并启动永不停止的功能然后退出。
  4. 永不停止的功能包括10毫秒的睡眠和处理所有消息的呼叫。