Poniższy fragment kodu rozpoczyna proces, który trwa jedną sekundę, aby zakończyć, a następnie czeka na zakończenie tego procesu przed zakończeniem. Z jakiegoś powodu następujący kod zawiesza się w p->waitForFinished()
, mimo że proces się zakończył.Dlaczego nie można czekać na zakończenie procesu Qt w statycznym destruktorze?
#include <QtCore/QProcess>
class A
{
public:
A():
p(0)
{
}
~A()
{
p->waitForFinished();
delete p;
}
void start()
{
p = new QProcess(0);
p->start("sleep 1");
}
QProcess *p;
};
int main(void)
{
static A a;
a.start();
return 0;
}
Jednak jak tylko a
nie jest zadeklarowane statycznie, lecz w sposób następujący:
A a;
wywołanie waitForFinished()
powiedzie. Czy jest to błąd Qt, czy jest to oczekiwane zachowanie? Podejrzewam, że jakaś logika wymagana do wykrycia, czy aplikacja zakończyła się pomyślnie, jest już zniszczona po wywołaniu destruktora A
.
jaki system operacyjny? .......... – neagoegab
@neagoegab Linux –