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

초기 테스트에 멀티 스레드를 적용해 보기 -2-

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

안녕하세요?

 

지난번 포스팅에서 어떻게 exe파일로 빌드하는 것 까지 담당을 하기는 했었는데, 문제는 이것만 가지고는 안되기에 일단 본격적으로 멀티 스레딩을 하기 위한 과정에 들어가 봐야 하는 단계가 아직 남아 있습니다. 일단 포스팅을 할 내용이 길어져서 하는 수 없이 전체적인 포스팅을 나누어야 했습니다.

 

먼저 위 스크린샷과 같이 기존에 있던 데이터 베이스에서 데이터를 읽어오기 위한 메서드를 주석처리 해서 막아 주도록 합니다.

 

그리고 나서 작업을 하기 위해서 QThread라고 이름이 붙어 있는 새로운 Worker라는 클래스를 만들어 보도록 합니다. 이 클래스에서는 가지가지 요소들을 받아 와야 합니다.

 

그리고 나서 다음으로 해야 할일은 위 스크린샷처럼 기존의 메서드를 위 스크린샷과 같이 멀티 스레드가 실행될 수 있도록 바꾸어 보도록 합니다.

 

그런데 이렇게 해서 일단 실행을 하였더니, 제대로 실행이 되지 않는 문제점이 노출이 되었습니다. 정확히는 데이터 베이스를 선택하기 위한 윈도우가 뜨지 않았습니다.

 

 

그리고 나서 해당하는 코드를 위 스크린샷과 같이 버튼을 누르면 나오도록 다시한번 코드를 바꾸어서 짜 놓도록 해야 할 필요성이 있습니다.

 

그리고 나서 QThread의 역할을 할 클래스에서 위 스크린샷에서 볼 수 있는 것처럼 새로운 내용의 데이터를 받을 수 옸도록 조치를 취해 주고, 자동으로 run메서드가 실행되지 않으니, 일일히 지정을 해 주도록 합니다.

 

이렇게 해서 일단 실행은 되기는 되는 것 같은데, 문제는 중요한 종류의 에러가 발생하는 것을 확인할 수 있었습니다. 이래서야 상황이 좋지 않습니다.

 

일단 프로그레스바라는 것이 Worker에서는 없어서 생기는 문제라고 할 수 있기는 있습니다. 그래서 이 문제를 해결하기 위해서 새로운 조치를 해야만 합니다.

 

그래서 Worker클래스에서 위 스크린샷에서 볼 수 있는 것처럼 일단 시그널을 3개 추가해 주도록 합니다. 이렇게 하는 것으로 일단 첫 작업은 완료가 되기는 되었습니다.

 

그리고 나서 다음으로 해야 할일은 위 스크린샷에서 볼 수 있는 것과 같이, 일단 신호를 방출하기 위한 메서드를 생성해 보도록 합니다.

 

그리고 나서 기존에 서브 프로그레스를 확정하는 프로그레스바를 위 스크린샷에서 볼 수 있는 것처럼 일단 신호를 방출하는 메서드를 호출하는 것으로 바꾸어 주었습니다.

 

그리고나서 위 스크린샷에서 보이는 것처럼 일단 신호가 들어오게 되면, 다른 메서드와 연결이 되도록 메인 클래스에서 작업을 해야 하는데, 일단 포스팅이 너무 길어지기 때문에 여기서 끊어 주도록 하겠습니다. 나머지 내용은 이어서 올릴것을 약속드리며 이만 물러가 보겠습니다.

반응형