2014-06-11 8 views
0

루프에서 QThread 삭제 :다음과 같이 처리하고 for 루프에서 실행되고 내가 QThread에서 상속 된 클래스 (IT를 ClassA라고 할 수 있습니다) 한

for(int i=0;i<somenumber;i++) 
{ 
    ClassA* classa = new ClassA(); 

    classa->execute(); // just a normal direct function call 

    classa->exit(); 
    classa->deleteLater(); 
} 

문제는를 ClassA는이 포함된다 많은 양의 메모리가 필요하며 루프가 계속 실행되는 동안 파손되지 않는 것 같습니다. 따라서 프로그램은 메모리가 생성 된 직후 (메모리 누수와 같이) 충돌합니다. 나는 물론 "classa 삭제"를 사용하여 프로그램을 중단 시키려고했습니다.

누구나 루프에서 이러한 클래스를 올바르게 실행하고 삭제하는 방법을 알고 있으므로 지속적으로 메모리를 차지하지는 않습니다.

for 루프도 다른 스레드에 있습니다. 그래서 deleteLater()를 호출 할 때 이벤트 루프가 중요한 스레드 계층 구조가 있습니까? 이 코드는 너무 복잡해서 글을 쓸 수는 없지만 내가 원하는 가장 빠른 대답은 스레딩 환경에서 적절하게 Qthread 객체를 삭제 (예 : eventloop을 올바르게 사용)하여 메모리 누수가 없거나 (예 : Qthread 개체는 삭제되지 않습니다.

+0

[포스트는 최소, 전체, 올바른 예 (http://stackoverflow.com/help/mcve). – Rakib

+0

코드가 너무 복잡해서 글을 쓸 수 없지만 가장 빠른 대답은 스레딩 환경 (예 : eventloop을 올바르게 사용)에서 Qthread 객체를 올바르게 삭제하여 메모리 누수가 없거나 메모리를 구축하는 것과 비슷합니다. Qthread 객체는 삭제되지 않으므로) –

답변

0

run()을 다시 구현 한 경우 스레드 완료를 위해 항상 wait()을 사용할 수 있습니다. 귀하의 방법이 execute() 일 경우 start()이라고 가정합니다. 는 그런 다음 savely이 직접 (귀하의 예제 코드를 사용하여) 삭제할 수 있습니다

for(int i=0;i<somenumber;i++) 
{ 
    ClassA* classa = new ClassA(); 

    classa->execute(); // just a normal direct function call 

    classa->exit(); 
    classa->wait(); // wait till the QThread is finished 
    delete classa; // immediately free resources 
}