2011-08-09 1 views
1

QT의 그래픽보기 프레임에 익숙하지 않아 문서 나 Google에서 아무 것도 찾을 수 없습니다.메인이 아닌 다른 스레드에서 QGraphicsScene을 업데이트하십시오.

일부 데이터에 대한 표현을 그릴 수있는 GUI 응용 프로그램이 있습니다. 응용 프로그램 자체는 행렬/벡터 (신경망의 것)로 일부 작업을 수행하고 QGraphicsScene에 표현해야합니다. 지금까지는 그렇게 좋았지 만, 다른 스레드에서 QGraphicsScene을 업데이트하려고 시도하면 어도비 앱 &이 조만간 충돌을 일으킨다는 것을 알게되었습니다. QT Docs는 스레드 안전성에 대해 전혀 말하지 않는다. & Google은 아무것도 제공하지 않는다. 내가 원하는 (그리고 꽤 많이 필요) 계산을 실행하면 & GUI 표현을 적절하게 업데이트하지만 GUI 제어 등은 응답 성을 유지해야합니다. 내가 말했듯이, 나의 첫 번째 생각은 다른 스레드에서 모든 것을 수행하는 것이지만, 시도하면 무작위로 충돌합니다.

QT에서 이런 종류의 일을하는 "수락 된 관행"이 있습니까? 아니면 그래픽 뷰 프레임 워크 자체에서 모르는 몇 가지 문제가 있습니까?

답변

2

Qt 문서는 실제로 quite a lot about thread safety이라고합니다. QGraphicsScene에 대한 문서가 아무 것도 말하지 않으면 스레드 안전성이 보장되지 않아보고있는 동작과 일관성이 없기 때문입니다.

다른 스레드에서 계산을 실행하고 해당 스레드를 기본 GUI 스레드와 적절하게 동기화하십시오. 이 작업을 수행하는 간단한 방법은 계산 준비가 완료되면 기본 스레드에 플래그를 설정하는 것입니다. 그렇게하면 플래그를 확인하는 것만으로 적절한 시간에 메인 스레드의 적절한 QGraphicsScene 메소드를 호출 할 수 있습니다.

+0

오, QT 문서가 그런 식으로 몰랐습니다. 미안합니다. Kindof는 javadocs에 익숙했지만 일반적으로 명시 적으로 명시했습니다. 어쨌든, 그 때 주변을 알 수 있습니까? – TC1

+0

내 대답이 업데이트되었습니다. 두 스레드간에 동기화해야합니다. 같은 방식으로 다른 QGraphicsScene 인스턴스가 다른 스레드에서 같은 메서드 또는 다른 메서드를 실행하는 중간에 QGraphicsScene 메서드를 호출 할 수 있습니다. 가능한 대학살을 생각해보십시오! – Troubadour

+0

유의 사항 및 허용. – TC1