2011-02-12 2 views
3

다음과 같은 시나리오가 있습니다 :QProcess 변수를 재사용하면 stdout/stderr 채널에 남은 데이터가있을 수 있습니까?

QProcess*p; 
// later 
p->start(); 
//later 
p->terminate(); // there might be unread data in stdout 
//later 
p->start(); 

프로세스 stdout을 읽습니다. 두 번째로 p-> start()를 호출 한 후 첫 번째 p-> start()에서 stdout 버퍼에 아직 읽지 않은 데이터가 남아있을 수 있습니까? 그것은 나를 위해 문제가 될 것입니다. 완충제 등을 세척해야합니까?

+0

정말 모르겠다. 소스를 확인할 필요가 있지만 왜 그렇게하고 싶지는 모르겠다. 새로운 QProcess를 작성하십시오. 그것은 해를 끼치 지 않을 것이며 가능한 버그로부터 당신을 보호 할 것입니다. –

답변

7

좋아요, 출처를 확인했습니다. QProcess는 방법은 명시 적으로 모두 출력 버퍼를 지 웁니다) (시작 ::, 그래서 적어도이 점에서 괜찮을해야합니다

void QProcess::start(const QString &program, const QStringList &arguments, OpenMode mode) 
{ 
    Q_D(QProcess); 
    if (d->processState != NotRunning) { 
     qWarning("QProcess::start: Process is already running"); 
     return; 
    } 

#if defined QPROCESS_DEBUG 
    qDebug() << "QProcess::start(" << program << "," << arguments << "," << mode << ")"; 
#endif 

    d->outputReadBuffer.clear(); 
    d->errorReadBuffer.clear(); 

은 아직도하지만, 그것은 동일한 개체를 재사용하는 나쁜 스타일 같아요.

관련 문제