阻塞,直到进程在微小的进程库中结束 我编写C++代码,接受命令行参数,将其传递给系统命令,如 ECHECU/,并打印响应。为了与外部流程进行沟通,我使用。我当前代码的问题是它必须等待配置的延迟5秒

阻塞,直到进程在微小的进程库中结束 我编写C++代码,接受命令行参数,将其传递给系统命令,如 ECHECU/,并打印响应。为了与外部流程进行沟通,我使用。我当前代码的问题是它必须等待配置的延迟5秒,c++,delay,external-process,C++,Delay,External Process,当我尝试将代码移动到进程对象时,我发现下面的编译错误 Test.cpp: In lambda function: Test.cpp:29:3: error: ‘p_Request’ is not captured 一旦外部命令完成执行,是否有人可以帮助我消除延迟并填充结果对象 测试.cpp #include "process.hpp" #include <iostream> #include <string> using namespace TinyProcessLi

当我尝试将代码移动到
进程
对象时,我发现下面的编译错误

Test.cpp: In lambda function:
Test.cpp:29:3: error: ‘p_Request’ is not captured
一旦外部命令完成执行,是否有人可以帮助我消除延迟并填充
结果
对象

测试.cpp

#include "process.hpp"
#include <iostream>
#include <string>

using namespace TinyProcessLib;
using namespace std;

class Request{

    public:

        string s_Request;

        bool b_requestProcessed = false;

        bool b_error = false;

        string s_Response = "No response yet";

};

void processCommand( Request* );

int main(int argc, char *argv[]){

    Request *p_Request = new Request();
    p_Request->s_Request = argv[1];
    processCommand( p_Request );
    while(!p_Request->b_requestProcessed){
    }
    cout << p_Request->s_Response << endl;
}


void processCommand( Request* p_Request ){

    if(!p_Request){
        p_Request->b_error = true;
        return;
    }
    auto output=make_shared<string>();
    Process process(string("echo ") + string(p_Request->s_Request), "", [output](const char *bytes, size_t n){
         *output+=string(bytes, n);
    });
    // Help me to remove this delay
    this_thread::sleep_for(chrono::seconds(5));
    p_Request->s_Response=*output;
    auto exit_status=process.get_exit_status();
    if(exit_status == 0){
        p_Request->b_requestProcessed = true;
        p_Request->b_error = false;
    }else{

        p_Request->b_error = true;
        p_Request->s_Response="Command Execution Failed";
    }

}
延迟结果

./Test  "Hello Stack Overflow"
Hello Stack Overflow
./Test  "Hello Stack Overflow"
[[EMPTY_LINE]]
立即获得结果

./Test  "Hello Stack Overflow"
Hello Stack Overflow
./Test  "Hello Stack Overflow"
[[EMPTY_LINE]]
编辑到

auto exit_status=process.get_exit_status();
p_Request->s_Response=*output;

.get_exit_status()等待进程完成,您的=*输出将生成一个副本。因此,在第一个版本中,您正在复制一个空字符串(因为进程尚未完成),而在第二个版本中,您正在等待进程完成,然后再进行复制。

我建议您仔细查看尚未发布的“process.h”文件;其中应该有一些内容允许您等待流程完成。错误:“p_请求”未被捕获-您是否尝试捕获它?@UKMonkey-这是流程的来源。hpp@manni66-您能告诉我捕获的语法吗?我对此一无所知。“///等待进程完成,并返回退出状态。int get_exit_status()noexcept;”所以在尝试触摸输出之前,只需调用此函数即可