Ciao. Sto usando MFC.
Appena entro rendo la finestra modale, dall OnInitDlg mi viene generato un thread.
La schermata di caricamento dovrebbe apparire quando chiudo il thread, che aspetto per qualche secondo la chiusura di questu'ultimo.
Eccoti lo spezzone di codice per la chiusura del thread (spero basti):
codice:
void RFAmbiente::Chiudi() {
GetDlgItem(IDC_CHIUDI_CONFIG_MMC)->ShowWindow(FALSE);
GetDlgItem(IDC_CHIUDI_CONFIG_MMC2)->ShowWindow(TRUE);
UpdateWindow();
go = false;
//MessageBox(L"qui!");
if (threadTerminato == false) {
// Sleep(5000);
TerminateThread(rfThread, -1);
Sleep(1000);
CloseHandle(rfThread);
}
Logger::log(L"RFAmbiente", L"OnChiudi 1", 9);
// if (hf!=NULL && modalita!=2 && modalita!=3) SIMUtil::ClosePort(hf);
if (hf != NULL) {
SIMUtil::GetCMD(hf, "AT*BRK");
Sleep(2000);
SIMUtil::GetCMD(hf, "AT*Q");
Sleep(3000);
SIMUtil::ClosePort(hf);
hf = NULL;
}
EndDialog(0);
}
void RFAmbiente::OnChiudiConfigMmc() {
if (modalita==0 || (salva==1 && result!=NULL) || modalita==3) {
MessageBox(L"QUI 1!");
if (modalita!=0 && salva!=1 && modalita!=3) {
MessageBox(L"QUI 2!");
if (SystemUtil::InputBox(
CString("I dati non verranno memorizzati; sei sicuro di voler abbandonare l'operazione di RFAmbiente?"),
MB_YESNO)==IDYES) {
MessageBox(L"QUI 3!");
result = NULL;
Chiudi();
}
}
else {
MessageBox(L"QUI 4!");
Chiudi();
}
}
else {
MessageBox(L"QUI 5!");
if (SystemUtil::InputBox(
CString("I dati non sono stati ancora memorizzati; sei sicuro di voler abbandonare l'operazione di RFAmbiente?"),
MB_YESNO)==IDYES) {
MessageBox(L"QUI 6!");
Chiudi();
}
}
}
Premendo sul pulsante di chiusura della finestra, mi viene richiamato il metodo OnChiudiConfigMmc().
Per quanto riguarda il box, mi basta anche una cosa statica che ha solo la scritta senza elementi "dinamici" (tipo barre di caricamento etc).
Un altra cosetta Nel primo IF del metodo Chiudi(), mi conviene usare secondo te il WaitForSingleObject() o va bene così?
Grazie