在进程返回消息后创建进程并运行代码(C ++)

时间:2011-09-17 11:52:39

标签: c++ windows process

我正在尝试在C ++中创建一个新进程(不应该阻止当前程序),并让C ++监听一条消息。当消息到达时,我想再运行一些代码。

我有这个方法执行命令并立即产生结果,但我不知道如何在进程返回消息时创建一个运行代码的方法:

    string exec(const char* cmd)
    {
        // popen for *nix
        FILE* pipe = _popen(cmd, "r");

        if (!pipe)
            return "";

        char buffer[128];
        string result = "";

        while(!feof(pipe)) {
            if(fgets(buffer, 128, pipe) != NULL)
                result += buffer;
        }

        // pclose for *nix
        _pclose(pipe);

        return result;
    }

注意:在进程返回消息之前可能需要1-3秒 - 然后进程将继续执行,因此上述代码不足以执行程序永远不会结束。

2 个答案:

答案 0 :(得分:1)

您可以将执行该进程的代码放在一个单独的线程中,这样主线程可以在辅助线程启动进程时继续执行,并等待来自子进程的消息。

答案 1 :(得分:0)

开始此过程后,请定期检查是否已向您发送消息。如果是这样,请拨打您需要拨打的代码。

具体如何执行此操作取决于其余代码的结构。例如,如果您已经有一个定期事件表,那么它非常简单。如果你有一个'选择'循环类型设计,它再次非常简单。

如果您还没有这些东西,请写一个'CheckIfTheresAnythingToDo'功能。有一个布尔标志,指示您是否正在运行子进程。如果标志清除,在'CheckIfTheresAnythingToDo'中立即返回。如果已设置,请致电select并查看是否已收到该消息。如果是这样,请拨打您需要拨打的代码。 (我建议不要使用标准I / O,因为它不能很好地解决你需要一次做多件事的非阻塞语义。)

然后只需在代码中的关键点调用CheckIfTheresAnythingToDo即可。如果您有某种循环结构,请在循环的每次传递中调用一次。如果你有等待事物的代码,请让你的wait函数调用它。

但是,当你开始设计时,你应该已经知道该怎么做了。 “我需要偶尔检查一下”是一个非常典型的要求,如果你的整体设计无法适应它,你应该重新考虑这个设计。