C++ 컴파일된 프로그램을 백그라운드에서 실행하고 필요할 때 입력을 보냅니다.

C++ 컴파일된 프로그램을 백그라운드에서 실행하고 필요할 때 입력을 보냅니다.

다음과 같은 구조를 갖는 UNIX 환경용으로 C++로 작성된 컴파일된 프로그램이 있습니다.

int main(){
...
LoadEngine()
...
while(1){
    std::cin >> buffer;
    ...
    ExecuteFunction(buffer);
}
}

엔진을 로드하는 데 시간이 꽤 걸리기 때문에 먼저 백그라운드에서 프로그램을 시작한 다음 필요할 때 입력을 보내 보았습니다.

끝에 표준 앰퍼샌드를 추가하여 프로그램을 실행하면 프로그램이 백그라운드에서 실행되는 것으로 보이지 않고 대신에 중지됩니다.표준::신콘솔에서 입력을 받을 때까지, 콘솔에서 입력을 받은 후 중지됩니다.

프로그램이 백그라운드에서 지속적으로 실행되고 입력을 받아 필요할 때 기능을 실행하도록 하려면 어떻게 해야 합니까?

편집하다: 최종 제품은 음성을 인식하고 인식된 단어를 기반으로 특정 동작을 수행할 수 있는 소형 장치(RaspberryPi)입니다. 내 프로그램은 단어 입력을 기반으로 작업을 수행하는 장치의 일부이며 단어 입력은 변수에 해당합니다.완충기위의 코드 조각에서.

그래서표준::신Partial은 엔진을 로드하기 위해 백그라운드 프로세스에서 부분 코드가 시작되고 설계된 모든 작업을 수행하는지 테스트하는 데 사용하는 더미 코드 라인입니다.

편집 2: 달성하려는 목표를 명확히 하기 위해 프로그램은 음성 인식기에서 입력을 받아 작업을 수행합니다(예: 입력에서 음성을 합성하고 LED에 신호를 보내는 등). 텍스트 입력은 콘솔(내 코드가 현재 이 작업을 수행하고 있음)에서 직접 가져오거나 내가 이해하지 못하는 다른 방법으로 가져올 수 있습니다. 입력이 따르는 유일한 요점은이어야 한다텍스트이며 다른 음성 인식 프로그램(다른 개발자가 처리함)에서 전송되었습니다. 따라서 구체적인 방법은 명시되어 있지 않습니다. 내가 걱정해야 할 것은 텍스트 입력에서 함수를 실행하는 프로그램입니다(예:완충기코드 조각에서). 따라서 일반적인 구조는 다음과 같습니다.

Int main(){
LoadEngine()
while(1){
    buffer = ReceiveInput();
    ExecuteFunction(buffer);
 }}

어디입력()을 받습니다그 중 일부는 현재 다음과 같이 구현됩니다.표준::신. 사실 어떤 방법이든 처음에 엔진을 한 번만 로드하면 프로그램을 실행할 수 있다.기능 실행입력부터 장치 종료까지.

답변1

그럴 것 같지 않습니다. 이 경우 일반적으로 네트워크 포트를 수신하고 연결을 수락()하여 데이터를 읽은 다음 필요한 작업을 수행합니다. 그런 다음 데이터를 보내려면 클라이언트 애플리케이션도 필요합니다. 이는 일반적으로 백그라운드 응용 프로그램이 작동하는 방식입니다.

답변2

어색하고 불편하지만 아마도 다른 답변보다 덜할 것입니다.

프로그램이 입력을 요청할 때마다:

  1. 쉘 프롬프트를 입력하십시오 - 프로그램을 시작하는 쉘을 의미합니다. (즉, 전경에서 단순히 "엔진" 프로그램을 실행하고 있지 않다는 사실은 파일 편집과 같은 다른 작업을 수행하기 위해 터미널을 사용하고 있음을 나타냅니다. 프로그램이 입력을 요청할 때마다 편집기를 저장하고 종료한 다음 기본 셸로 돌아가거나 편집기를 일시 중지할 수 있지만 이로 인해 다음 단계가 더 복잡해집니다.
  2. fg물론 을 입력하면 Enter백그라운드 작업이 포그라운드로 표시됩니다. 위에서 언급한 것처럼 여러 개의 백그라운드 작업이 있는 경우 "엔진" 프로그램을 포그라운드로 가져오기 위해 수행해야 하는 작업을 수행하세요.
  3. 프로그램과 상호 작용하십시오.
  4. 잠시 동안 실행(계산 등)을 재개할 준비가 되면 Ctrl+를 누른 Z다음 bg (다음에 Enter)을 누릅니다.

프로그램이 실행되는 동안 반복하십시오.

답변3

입력을 수신할 시기와 입력을 예상할 위치를 알 수 있도록 애플리케이션에 웨이크업 호출을 보내야 합니다. 백그라운드에서 실행하면 터미널 프로세스와 분리되기 때문입니다. 더 나은 해결책은 (IMHO) 엔진에 대한 인터페이스로 별도의 프로그램을 만드는 것입니다. 엔진이 문제처럼 보이기 때문입니다. 런타임에 엔진에 입력을 보내는 간단한 스크립트와 통신하고 작성하는 함수 세트를 제공합니다. 엔진은 백그라운드에서 실행되고 다른 프로그램은 엔진에 직접 연결됩니다. 이것이 제가 현재 생각할 수 있는 최선의 해결책입니다.

관련 정보