wxWidgets에 이상한 문제가 있습니다. 다음 코드가 있습니다wxProgressDialog 어떻게 앱을 죽은 후에도 생생하게 유지할 수 있습니까?
MyFrame::OnDoSomeLongThing(...) {
progScreen = new wxProgressDialog(text,text,number,this,wxPD_AUTO_HIDE); // wxProgressDialog *progScreen is class member
doPartOfThing() // calls the update method at the end of it
....
doLastPartOfThing() // again calls update method that pushes value to 100/100
progScreen->Destroy();
}
MyFrame::update() {
progScreen->Update(newValue);
}
이제 여기 있습니다. 말 그대로 progScreen과 관련된 행을 주석 처리 할 수 있습니다. 프로세스가 진행 대화 상자를 사용하지 않고 진행하도록합니다. 주 창을 닫을 때 내 앱이 정상적으로 종료됩니다.
그러나 진행 대화 상자를 사용하는 것만으로도 응용 프로그램의 수명이 연장됩니다. 나는 Destroy()를 시도해 봤는데, 간단히 'delete progScreen'을 시도했고, 매번 : 메인 프레임을 닫고, 프로세스가 계속 실행되며, 어떤 시점에서는 천문학적 숫자로 종료된다. 내가 생각할 수있는 유일한 것은 doPartsOfThings 메소드가 boost :: this_thread :: sleep을 호출 할 수 있다는 것입니다. 왜냐하면 그것은 내 모델 클래스에서 대기 중이고 그 외의 것들을 포함하기 때문입니다. 그러나이 은이 내 문제와 관련이 없어야합니다. 아니면 어쩌면 ... 편집 : progScreen -> Update()가 메인 (GUI) 스레드에서 호출되고 있음을 강조하고 싶습니다.
그래서 내가 wxProgressDialog를 올바르게 사용하고 있습니까? 그렇지 않다면 어떻게 사용해야합니까?
도움 주셔서 감사합니다.
편집 :
음 ...이 제거 wxPD_AUTO_HIDE이 문제를 해결 것으로 나타났다. 나는 아직도 문제가 무엇인지는 모르겠지만 대화는 여전히 이전처럼 작동합니다. 앱이 예상대로 종료됩니다.
는 어떻게 설정을 진보와 대화 사이의 부모 - 자식 관계가 무엇입니까? – Ajay
'this'를 생성자의 부모 창 매개 변수에 전달했습니다. 이것도 편집에 기록했습니다. – cemulate
자동 숨기기 스타일을 제거해보십시오. 대화 상자가 완료 될 때 삭제되는지 여부를 확인할 수 있습니다. 그렇지 않으면 대화 상자가 닫혀 있다고 가정하고 여전히 닫혀 있는지 여부를 알 수 없습니다. - 표시된 코드에 문제가 표시되지 않는 것처럼 들립니다. – UncleBens