阻塞,直到进程在微小的进程库中结束 我编写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;”所以在尝试触摸输出之前,只需调用此函数即可