안녕하세요?
이번 포스팅에서는 예수금을 알아오기 위한 메서드를 작성해서 한번 적용해 보도록 하겠습니다. 이 작업도 쉽게 끝날 것이라고 처음에는 생각을 했습니다만, 점점 작업이 하나하나 만만하지 않다는 것을 알 수 있었습니다. 처음에는 그저 스파케티 코드를 피하자고 했는데, 이것도 만만하지 않았습니다.
먼저 해야 할일은 위 스크린샷처럼 예수금을 알아보기 위한 메서드를 작동시키는 것 입니다. 이 방법으로 일단 opw00001이라는 TR을 키움증권 서버에 요청하고 처리할 수 있기를 희망합니다.
위 스크린샷처럼 일단 예수금의 정보를 가겨오기 위한 정보도 위 스크린샷처럼 일단 가지고 오도록 합니다. 이렇게 함으러써, 일단 이번에도 제대로 작동이 되리라 생각을 했습니다.
그리고 나서 위 스크린샷처럼 일단 실행을 했는데 2번째 스레드까지는 큰 문제없이 진행이 되는 것을 확인할 수 있었습니다.
그런데 이후 문제가 발생하는 것을 목격할 수 있었습니다. 이게 어떻게 된 일인지 몰랐습니다만, 일단 이건 이것이고, 다음으로 해야 할일은 이 에러를 바로잡는 것 입니다.
일단 어디가 문제인가 싶어서 한번 찾아보니까, 위 스크린샷처럼 commRqData에서 나오는 에러코드가 -211이면 위 스크린샷과 같이 나오는 부분이 문제인 것으로 보입니다.
그리고 나서 여기서도 global을 선언해서 전역으로 공유가 가능 = 스레드간에 공유가 가능한 변수를 만들어 놓아서 여기서 정보를 공유하도록 만들었습니다.
그런데 작업을 하던 이때에 키움증권 서버에서 작업을 하고 있는 것인지, 아니면 다른 문제가 있었는지는 모르겠습니다만, 일단 타인계좌는 사용할 수 없다는 에러 메세지가 나오고 있습니다.
그리고 나서 경고창의 확인을 누르고 나더니 위 스크린샷처럼 제대로 된 내용을 확인할 수 있었습니다. 이래서야 이게 자동으로 작업이 될 리가 없습니다.
그래서 이게 너무 많은 양의 스레드가 정보를 요청해서 생긴 문제가 아닌 것인가 하는 생각이 들어서, 이번에는 위 스크린샷처럼 5개의 스레드에서 4개로 줄이도록 해 보았습니다.
아예 이번에는 메서드를 작성하기를, 모든 스레드가 모두 정보를 각각 요청할 필요 없이, 일부 정보는 공유를 해도 별 문제가 없을 것으로 생각을 합니다. 그래서 1번 스레드, 처음으로 실행이 되는 스레드의 경우에만 예수금을 요청하고, 요청해서 받아온 정보를 광역변수에 저장합니다. 그리고 나머지 스레드는 이 광역변수에서 정보를 받아서 공유하도록 합니다.
그리고 나서 위 스크린샷처럼 예수금을 확인하면, 예수금 정보를 위 스크린샷처럼 일단 광역변수인 global로 만들어 놓은 변수에 집어 넣도록 합니다.
이렇게 하고나서야 이제는 4번째 스레드까지 제대로 나오는 것을 확인할 수 있었습니다. 이제 5개의 스레드에서 4개의 스레드에서 줄어들어서 조금은 무언가 아쉬운 것이 있습니다.
다음으로 해야 할일은 위 스크린샷처럼 계좌의 기본정보를 가지고 오는 내용이 있는데, 이 메서드 역시 첫번째로 실행이 되는 스레드가 아니면 실행을 하지 말고, 그냥 첫번째 스레드가 가져온 정보를 공유하도록 합니다. 이제 이게 제대로 작동이 되는 것을 확인할 수 있었습니다. 다만, 앞으로 남은 코드는 아직도 많이 남아 있습니다.
'무모한 도전-주식 인공지능 만들기' 카테고리의 다른 글
QThread의 적용 part8 (3) | 2019.07.29 |
---|---|
QThread의 적용 part7 (6) | 2019.07.29 |
QThread의 적용 part5 (0) | 2019.07.28 |
QThread의 적용 part4 (0) | 2019.07.28 |
QThread의 적용 part3 (0) | 2019.07.28 |