2014-04-09 3 views
1

내가 무엇을하려고하는지 빨리 설명하겠습니다. 현재 2 개의 스레드로 구성된 프로그램이 있습니다. 하나의 작업자 스레드와 하나의 GUI 스레드, 작업자 스레드는 2kHz로 센서 데이터를 수집하고 GUI 스레드는 수집 된 데이터를 시각화합니다. 이 프로그램은 Qt 프레임 워크를 사용하여 C++로 작성되었습니다.싱글 톤을 사용하여 스레드간에 데이터 전달

신호 및 슬롯 옵션을 이미 시도했습니다. Qvector<PointF>을 내 작업자 스레드의 신호로 내 GUI 스레드의 슬롯에 전달하여이 작업을 수행했습니다. 그러나 그때 데이터가 내 작업자가 멈추어 져있는 동안 "고르지 못한 데이터"에 문제가있었습니다.

그런 다음 싱글 톤을 사용하여 두 스레드간에 데이터를 전달할 생각을했고 여기에 주요 질문이옵니다. 은이 경우에 싱글 톤을 사용하고 있습니까? 아니면 문제를 해결할 더 좋은 방법이 있습니까?

나는 이미 데이터를 보호하기 위해 글로벌 Qvector<PointF>과 글로벌 뮤텍스를 사용하여 개념을 테스트했지만, 대신 싱글 톤을 사용할 때 전역 변수가 훼손된다.

안부

+0

Qt 신호/슬롯을 사용할 때 정확히 어떤 문제가 있습니까? 무엇이 노동자를 멈추게 했습니까? – JBL

+0

신호/슬롯을 사용할 때 플롯 된 데이터가 고르지 않게 보였으므로 데이터를 수집하는 아날로그 장치에서도 많은 프레임이 누락되었다고 설명했습니다. – Mindstormer

+0

Qt :: QueuedConnection을 사용하여 작업자가 비동기 통신 상태가되도록 데이터를 큐에 넣었습니까? – zeapo

답변

1

아니, 즉 싱글이 의미 한 것이 아니다. 두 개의 스레드가 있으며, 하나의 스레드에서 다른 스레드로 데이터를 이동시키는 공유 메커니즘을 제공하고 두 스레드 모두에서 해당 메커니즘을 사용할 수 있도록합니다.

+0

그런 공유 메커니즘을 만드는 방법에 대한 지침이 있습니까? (그래서 나는 무엇을 검색해야하는지 안다) – Mindstormer

+0

원하는 컨테이너를 사용할 수 있으며이 컨테이너를 뮤텍스로 보호 할 수있다. 하나의 스레드가 뮤텍스를 잠그고 일부 데이터를 넣습니다. 다른 스레드는 뮤텍스를 잠그고 사용 가능한 데이터가 있는지 확인한 다음이를 그립니다. 컨테이너는 한 스레드가 데이터를 한쪽 끝으로 보내고 다른 쪽 끝은 다른 끝에서 데이터를 사용하는 대기열입니다. – Jens

관련 문제