QThread 사용법

전재 하 다http://hi.baidu.com/dbzhang800/item/c14c97dd15318d17e1f46f41
http://blog.csdn.net/jiong_1988/article/details/7945174
기원.
어제 실수 로 Qt 개발 자 (Bradley T. Hughes) 블 로그 의 글 you are - doing - it - wrong 을 보 았 습 니 다.결 과 는 어 지 럽 게 보 였 다. 어쨌든 최근 1 년 동안 Qt 를 독학 하고 Qt 와 manual, 예 등 자 료 를 조 심 스 럽 고 열심히 읽 었 는데 갑자기 QThread 의 정확 한 사용 방법 은 자신 이 본 적 이 없 는 것 이 고 Qt manual, example, 책 에서 언급 되 지 않 은 방법 이 라 고 알려 졌 다.대체 왜...
설마 manual, exmaple, 그리고 자료 중의 소개 가 모두 틀린 것 은 아니 겠 지?
다른 사람들의 평론 을 진지 하 게 보고 나 서 야 비로소 실 마 리 를 잡 았 다.모든 일 은 QThread 의 이벤트 순환 에서 비롯 됩 니 다!
QThread 의 두 가지 사용 방법
1. 이벤트 순환 을 사용 하지 않 습 니 다.이것 은 공식 적 인 Manual, example 및 관련 서적 에서 모두 소개 하 는 방법 이다.
a. 하위 클래스 화 QThread
b. run 함 수 를 다시 불 러 옵 니 다. run 함수 에 while 또는 for 의 순환 이 있 습 니 다.
c. 순환 의 종 료 를 제어 하기 위해 표 시 를 설정 합 니 다.
2. 이벤트 순환 을 사용 합 니 다.(블 로그 you are - doing - it - wrong 이 반박 하 는 것 은 바로 이런 상황 에서 의 용법 이다.)
a. 하위 클래스 화 QThread,
b. run 을 다시 불 러 와 서 QThread:: exec () 를 호출 합 니 다.
c. 이러한 종류의 신호 와 슬롯 을 정의 합 니 다. 그러면 슬롯 함수 가 새로 열 린 thread 에서 실행 되 지 않 기 때문에 많은 사람들 이 이 문 제 를 해결 하기 위해 구조 함수 에서 호출 합 니 다.
Bradley T. Hughes 는 다음 과 같이 설명 했다.
QThread 는 새 스 레 드 에서 실행 해 야 할 코드 를 포함 하지 말고 운영 체제 스 레 드 의 인터페이스 나 제어점 으로 봐 야 합 니 다.실행 할 코드 는 QObject 의 하위 클래스 에 넣 고 이 하위 클래스 의 대상 moveToThread 를 새 스 레 드 에 넣 어야 합 니 다.
그리고:
Qt 4.3 (포함) 이전에 run 은 가상 함수 이 므 로 run 함 수 를 하위 클래스 화 해 야 합 니 다.
Qt 4.4 부터 qthreads - no - longer - abstract    ,run 기본 호출 QThread:: exec ().이렇게 되면 하위 클래스 화 QThread 가 필요 없고 하위 클래스 화 하나의 QObject 만 있 으 면 됩 니 다. 이것 이 바로 Bradley T. Hughes 가 추천 하 는 방법 입 니 다.
마침내 알 아 봤 지만
아무래도 QThread 의 당초 디자인 으로 인 한 문제 일 것 입 니 다. 모든 문서 와 예 에서 Qthread 를 어떻게 사용 해 야 하 는 지 에 대해 언급 하지 않 아 QThread 에 대한 이러한 오용 을 더욱 심화 시 켰 습 니 다.
관련 링크:
http://labs.qt.nokia.com/blogs/2010/06/17/youre-doing-it-wrong/
http://labs.qt.nokia.com/blogs/2006/12/04/threading-without-the-headache/
http://labs.qt.nokia.com/blogs/2007/07/05/qthreads-no-longer-abstract/
http://gitorious.org/qthreadhowto/qthreadhowto/trees/master
http://blog.exys.org/entries/2010/QThread_affinity.html
http://thesmithfam.org/blog/2010/02/07/talking-to-qt-threads/

좋은 웹페이지 즐겨찾기