기본적으로 복잡한 계산을 수행하는 단일 대화 상자 응용 프로그램을 만들었습니다. 응용 프로그램은 처음에는 Win32 콘솔 응용 프로그램으로 만들어졌고 나중에는 진행률 막대를 추가하기로 결정한 다음 콘솔 응용 프로그램을 단일 대화 상자 기반 응용 프로그램으로 변환했습니다. 대화 상자에 진행 표시 줄이 있습니다. 대화 상자의 OnInitDialog() 함수에서 계산을 시작합니다. 계산은 작업자 스레드에서 실행 중입니다. 이 스레드는 _beginthreadex 함수를 호출하여 생성됩니다. progressbar는 PostMessage를 사용하여 메시지를 대화 상자에 게시하여 스레드에 의해 업데이트됩니다. 스레드가 실행을 완료 한 후 CDialog :: OnOK() 함수를 호출하여 대화 상자를 닫습니다. 문제는 대화 상자가 닫힌 후에도 응용 프로그램이 즉시 종료되지 않는다는 것입니다. 대화 상자가 닫힌 경우에도 응용 프로그램을 닫는 데 약 2 초가 소요됩니다. 이 문제를 해결하기위한 도움을 주시면 대단히 감사하겠습니다. 감사합니다. .MFC 스레딩 문제 - 모든 스레드가 완료된 후 프로그램이 종료되지 않습니다.
0
A
답변
0
작업자 스레드가 여전히 실행 중이기 때문입니다. 모든 스레드가 실행을 마칠 때까지 응용 프로그램이 종료되지 않습니다. UI 스레드는 작업자 스레드 전에 닫히기 때문에 창이 숨겨져있을 수 있지만 작업자 스레드가 작업을 완료 할 때까지 프로세스가 종료되지 않습니다.
0
작업자 스레드가 아직 실행 중일 수 있습니다. 스레드가 중지되었는지 확인하려면 이벤트를 사용하여 신호를 보냅니다. 사용자가 대화 상자에서 닫기 버튼을 누르면 스레드를 죽이기 위해 이벤트를 신호 할 수 있습니다.
복잡한 계산 (이벤트일지도 모름)에서 이벤트가 발생했는지 여부를 확인할 수 있습니다. 따라서 문제없이 스레드를 중지합니다.
while(true)
{
//Some complex task
DWORD dwWaitResult;
dwWaitResult = WaitForSingleObject(hwndShutdownEvent,0);
if (WAIT_OBJECT_0 == dwWaitResult)
{
break;
}
}
+0
아니, 그렇지 않다. 모든 내 작업자 스레드가 끝났습니다. 메모리 누수 문제가 있습니다. 어쨌든 시간 내 주셔서 감사합니다. – Ram
관련 문제
- 1. 0 스레드로 응용 프로그램이 종료되지 않습니다.
- 2. 응용 프로그램이 종료되지 않습니다.
- 3. 프로그램이 올바르게 종료되지 않습니다.
- 4. C++ 응용 프로그램이 종료되지 않습니다.
- 5. ExecutionService. 모든 스레드가 완료된 후 결과를 얻는 방법은 무엇입니까?
- 6. 스레드가 완료된 후 일부 작업 실행
- 7. 스레드가 완료된 후 공유 카운터 표시
- 8. 내 응용 프로그램이 종료되지 않습니다
- 9. 멀티 스레딩 - 모든 스레드가 신호를받을 때까지 기다림
- 10. C# wpf 스레드가 올바르게 종료되지 않습니다.
- 11. ASP.Net webservice의 멀티 스레딩 - 주 스레드가 완료된 후에는 어떻게됩니까?
- 12. 스윙 응용 프로그램이 종료 된 후 JVM이 종료되지 않습니다.
- 13. MPMoviePlayerViewController 응용 프로그램이 완료된 후 가로 완료
- 14. 셀러리 작업이 종료되지 않습니다.
- 15. Java 프로그램이 닫는 버튼으로 종료되지 않습니다.
- 16. 풀의 모든 스레드가 완료된 후에 요약 메시지를 인쇄하는 방법은 무엇입니까?
- 17. VC11 Winsock 응용 프로그램이 종료되지 않습니다.
- 18. 다중 스레드 (TThread) Delphi 응용 프로그램이 종료되지 않습니다.
- 19. NullPointerException이 throw되고 프로그램이 예상대로 종료되지 않습니다.
- 20. Java 프로그램이 문자열 비교에 따라 종료되지 않습니다
- 21. GWT 응용 프로그램이 Eclipse 내에서 종료되지 않습니다.
- 22. Python Tkinter 응용 프로그램이 제대로 종료되지 않습니다.
- 23. 시작 후 활동이 종료되지 않습니다. 내 알림
- 24. 스레딩 문제
- 25. MFC 앱이 완전히 종료되지 않는 이유는 무엇입니까?
- 26. MFC 대화 상자 응용 프로그램이 닫히지 않습니다.
- 27. 응용 프로그램이 종료되지 않음 :
- 28. 특정 코드 섹션에서 스레드가 종료되지 않게하려면 어떻게합니까?
- 29. 웹 서비스 호출 스레드가 완료된 후 UI를 업데이트하는 방법
- 30. 자바 스크립트에서 모든 콜백이 완료된 후 어떻게해야합니까?
대화 상자를 닫은 후에 디버거에서 휴식을 취하십시오. 어떤 코드에서 디버거가 깨지십니까? 어떤 쓰레드가 활성화되어 있습니까? – usr
응용 프로그램이 종료 된 후 VisualStudio의 출력 탭에 디버그 빌드로보고 된 메모리 누수가 있습니까? 이것도 시간이 걸릴 수 있습니다. – Clemens
@ xml-tools : 네, 맞습니다. 일부 메모리 누수가보고되었습니다. 나는 그들을 들여다보고 고치려고한다. 감사. – Ram