오래된 제품을 유지하면서 나는 'C++ Exception'을 말하는 수백 개의 메시지 상자로 채워지는 화면 오류를 발견했다. 내가 메시지 큐에있는 모든 메시지를 처리하는이 라인의 목적을 이해하지만 오류 원인을 모르겠어요ProcessMessages가 C++ 예외를 throw하는 이유는 무엇입니까?
Application->ProcessMessages();
: 나는 다음 줄에 문제를 추적.
특정 솔루션을 찾고있는 게 아니지만 다른 사람이이 문제를 겪고 있거나 어떤 상황에서 이러한 일이 발생할 수 있는지 궁금해집니다.
모든 메시지 상자를 닫으면 응용 프로그램이 정상적인 예상 동작으로 돌아갑니다.
업데이트 - 더 많은 검색을 한 후에 오류가 반드시 ProcessMessages의 오류가 아니라는 것을 알았습니다. 프로그램이 집중적 인 계산을하고 실제로 메모리가 부족하기 때문에 오류가 발생합니다. ProcessMessages를 주석 처리하는 것은 오류없이 계산을 수행 할 수있을 정도로 메모리 소비를 줄이는 것 같습니다. 따라서 ProcessMessages는 범인과 비슷하지만 실제로는 그렇지 않습니다.
내가 할 리팩터링이있는 것 같습니다.
업데이트 2 - 3 일 후, 나는 ProcessMessages가 호출 될 때만 오류가 발생한다는 결론에 도달했습니다. ProcessMessages에 대한 모든 호출에 대해 의견을 말하면 많은 경우 응용 프로그램이 상수의 메모리 사용량으로 정상적으로 실행되므로 집중적 인 계산이 메모리를 빨아 들이지 않는다는 것을 의미합니다. 호출의 주석 처리를 제거하면 메모리가 오류 지점으로 다시 급증합니다. 그래서 원래 질문은 의미합니다 : ProcessMessages가이 오류를 일으키는 이유는 무엇입니까?
일부 호출은 타이머 이벤트에서 만들어지고 다른 호출은 기본 응용 프로그램 실행에서 만들어지는 것으로 보입니다. 이것이 문제가 될 수 있습니까?
어떤 라이브러리를 사용하고 있습니까? –
사용중인 라이브러리가 확실하지 않습니다. Borland C++ Builder는 질문에 대해 알려주는 역할을 담당합니다. ProcessMessages는 C++ Builder Windows 응용 프로그램을위한 TApplication 클래스의 메서드입니다. – Everett
'std :: runtime_error' 잡으려고 시도하십시오 - 예외가 그 클래스를 기반으로한다면'e.what()'에서 더 많은 정보를 얻을 수 있습니다. – AndiDog