서브 클래 싱 된 QThread를 포함하는 클래스로 승격 된 3 개의 위젯이있는 QMainWindow가 있습니다. 그것들은 재귀 적 qthread의 로컬 QImage에 그려집니다.이 Qthread는 그려진 신호와 함께 전송 된 다음 슬롯에서 update (mandlebrot 예제)를 호출하여 렌더링됩니다. 이것은 안전하거나 위험한가? 그들은 어떤 데이터도 공유하지 않습니다. 적어도 생성하고있는 것은 아니며 코딩 범위를 벗어나는 Qt가 자동으로 생성 한 데이터를 공유 할 수 있는지 궁금합니다. the documentation에서3 개의 별도 QThread에서 3 개의 별도 QImage를 그리는 것이 안전합니까?
답변
:
QPainter를가 QImage, QPrinter 및 QPicture 페인트 장치에 칠하는 데 사용할 수 있습니다. QPixmaps 및 QWidgets 로의 페인팅은 지원되지 않습니다. Mac OS X에서는 GUI 스레드 외부에서 인쇄하는 경우 자동 진행 대화 상자가 표시되지 않습니다.
임의의 수의 스레드는 주어진 시간에 페인트 할 수 있지만 한 번에 하나의 스레드 만 주어진 페인트 장치에 칠할 수 있습니다. 즉, 두 스레드가 각각 다른 QImages에 페인팅하면 동시에 페인팅 할 수 있지만 두 스레드는 동시에 같은 QImage에 페인팅 할 수 없습니다.
FontConfig 지원이없는 X11 시스템에서 Qt는 GUI 스레드 외부에서 텍스트를 렌더링 할 수 없습니다. QFontDatabase :: supportsThreadedFontRendering() 함수를 사용하여 글꼴 렌더링을 GUI 스레드 외부에서 사용할 수 있는지 여부를 감지 할 수 있습니다.
X11의 글꼴 문제에주의하는 한 Pixmap 또는 커서 (Pixmap으로 구현 됨)를 사용하지 말고 같은 이미지에 같은 그림을 그리지 마십시오 여러 스레드에서 시간 ... 작동합니다.
Mandelbrot 예제에서 QImage는 신호 (암시 적으로 공유 됨)를 통해 값으로 전달됩니다. 즉, 스레드가 쓰기를 시도하면 자체 복사본이 생성됩니다.
오케이, 이것들은 내가 따라 왔던 가이드 라인이다. GDB의 모든 이슈를 생각해 볼 수 있겠는가? qthread에서 QLists를 사용하는 것이 안전합니까? –
다중 스레드 코드 디버깅은 단일 스레드보다 항상 어렵지만 드로잉한다는 사실은이를 변경하지 않을 것입니다. QList와 같은 Qt 데이터 구조는 * 재진입 *이지만 스레드로부터 안전하지는 않습니다 * ... QReadWriteLock 또는 QMutex로 둘 이상의 스레드가 동일한 QList에 손을 넣을 수있는 경우이를 잠글 수 있습니다 시각. 참조 : http://doc.trolltech.com/4.6/threads-reentrancy.html – HostileFork
다음 코드에서 seg 오류가 발생하는 것을 보았습니다. http://www.mediafire.com/?mwjlm3yltej 클래스는 자사의 데이터 멤버는 스레드 외부의 아무 것도 액세스하고 중단 점을 넣을 때만 seg 오류가 발생합니다. 나는 gdb의 잘못이라고 생각하고 싶다.하지만 그것은 드문 일이다. 런타임에는 결코 seg 오류가 발생하지 않는다. 클래스의 소스 코드를 세 번 복사하고 각 객체 인스턴스에 사용하면이 seg fault가 발생하지 않습니다. 코드를 단계별로 실행하면 GDB가이 모든 것에 대해 혼란 스러울 것이라고 생각하고 있습니다. –
- 1. 2 개의 별도 스크립트
- 2. 2 개의 별도 JavaScript 객체 클래스 비교
- 3. 두 개의 별도 linq 쿼리에 합류
- 4. 어떤 DHT 알고리즘을 사용해야합니까 (두 개의 별도 DHT에 가입하고 싶다면)?
- 5. sinatra를 사용하여 3 개의 별도 입력란에서 적절한 DateTime 값을 어떻게 구성합니까?
- 6. 어떻게 안드로이드에있는 3 개의 별도 XML 문자열 배열에서 멀티 라인리스트 뷰를 추가 할 수 있습니까?
- 7. 3 대의 컴퓨터와 4 개의 별도 OS (Windows 및 Linux)에서 NetBeans 프로필을 공유하는 방법은 무엇입니까?
- 8. C++과 두 개의 별도 프로그램에서 스레드 만들기
- 9. 3 개의 다른 같음
- 10. 3 개의 UITableViews가있는 UIScrollView
- 11. 3 개의 인덱스 버퍼
- 12. 동일한 클래스가 두 개의 별도 라이브러리에서 호환되지 않습니까?
- 13. VBA - 다차원 배열을 두 개의 별도 배열 대신 사용 하시겠습니까?
- 14. XSLT - 두 개의 별도 데이터 소스가 하나의 XSLT에 병합되었습니다.
- 15. 추적을 위해 두 개의 별도 계정 ID 사용
- 16. 두 개의 별도 SQL 데이터 원본에서 레코드 삭제
- 17. 그룹 mysql 결과가 두 개의 별도 div로 표시
- 18. 두 개의 별도 Git 리포지토리를 결합하는 방법은 무엇입니까?
- 19. 두 개의 별도 SQL 쿼리 결과를 'OR'로 결합
- 20. Django 캐시 별도 데이터베이스
- 21. 3 개의 꼭지점 사이의 각도
- 22. 3 개의 SQL 쿼리를 결합하십시오.
- 23. 하나 대신 3 개의 알림
- 24. 3 개의 웹보기를 하나의보기로 결합
- 25. MVC 3 개의 DisplayFor-Templates
- 26. 레일스 3 개의 MySQL 관계
- 27. 아약스로드에서 3 개의 점 jQuery
- 28. 3 개의 쿼리를 하나로 연결합니다.
- 29. 사용자 정보 및 Paypal 사용자를 위해 데이터베이스에 두 개의 별도 테이블이있는 것이 좋습니까?
- 30. Wordpress에서 별도 제목 페이지
gtk는 실제로이 질문에 속하지 않습니다. –