본문 바로가기
무모한 도전-주식 인공지능 만들기

QThread와 main 스레드간의 통신 연결-4-

by 인터넷떠돌이 2020. 2. 6.
반응형

안녕하세요?

 

계속해서 이어지는 QThread와 메인 스레드의 통신이라고 해야 할까, 단순한 통신이 아니라 아예 QThread에서 메인 스레드에 있는 GUI구성요소 중에 프로그레스 바를 제어하는 방법을 한번 연습하는 것에 가까워지고 있는데, 아무튼 이 시행착오를 벌인 내용에 대해서 포스팅을 해 보고자 합니다.

 

먼저 위 스크린샷에서 볼 수 있는 것처럼 QThread역할을 하는 클래스에서 신호를 송출할 때, 이번에는 서브 프로세스 - 한개의 종목에 대해서 읽어서 처리하는 과정에 대해서 한번 신호를 보내보고자 합니다.

 

먼저 위 스크린샷의 내용처럼 for문에서 쓸데없이 너무 반복이 되는 현상이 관찰이 되어서, 위 스크린샷에서 볼 수 있는 것처럼 그냥 2부분에서 3부분으로 메서드를 또 나누어 보고자 합니다. 아니, 그걸 넘어서 아예 원래는 1개였던 메서드를 4 부분으로 나누어 보았습니다.

 

그래서 위 스크린샷처러 이제는 for문의 i까지 메서드에서 메서드를 뛰어넘기 위한 self.가 붙은 변수로 바꾸어 주었으며, 그 다음으로는 모든 작업이 완료가 되면 finished가 나오도록 했습니다.

 

 

그리고 나서 메인 스레드 역할을 하는 클래스에서 해당하는 역할을 하기 위한 몇몇의 메서드를 만들어 주도록 합니다. 이렇게 해서 준비는 거의 되었다는 생각이 듭니다.

 

그런데 상황은 제 의도대로 흘러가지 않고서, 이상하게 finished가 나오지 않는 것을 볼 수 있었습니다. 왜 이러나 했더니..........

 

for문에서 한개의 메서드 실행이 끝나기를 기다리지 않고, 계속해서 반복해서 실행이 되면서, 위 스크린샷에서 나오는 것처럼 연속된 실행이 이런 에러를 만들어 낸 것이었습니다.

 

그런데 가만히 보니, 제가 잊어버린 것이 하나 있었는데, 이후의 과정인 또 다른 메서드를 실행시키라는 명령을 내리는 것을 잊어버린 것 이었습니다.

 

그렇게 해서 finished라는 글귀와 함께, 어떻게 제대로 종료가 될 정도로 결과를 얻는데 성공하기는 성공했습니다. 그런데 심각한 문제가 하나 발생하였으니..........

 

결과가 제대로 나오지 않는 문제점이 나오는 것 이었습니다. 이래서야 하나마나인 상황을 넘어서 않 좋은데, 어디서 부터가 문제인지는 몰라도 이걸 어떻게 해서든 해결하지 않으면 안되는 상황에 또 부딪쳤습니다. 이번 포스팅을 기점으로 해서 제가 어떻게 하면 QThread와 메인 스레드간에 통신을 하는지는 알았는데, 문제는 그걸 메인 스레드의 흐름을 자연스럽게 제어하는 데는 아직 서툴렀습니다.

반응형