QT 쓰레드에 관한 질문입니다
QT에서 QThread를 쓰려고 합니다.
제가 쓰레드에 관한 개념이 확실히 잡히지 않아서 사용하는데 좀 헤깔리는게 있는데 질문 좀 드리겠습니다.
프로그램을 실행하면 lyse(메인쓰레드?)의 ui가 뜹니다. 이 화면에서 버튼을 하나 클릭하면 4가지의 signal이 발생합니다.
이 시그널들은 각각 A, B1, B2, C쓰레드를 생성합니다.
A쓰레드는 통신쓰레드로서 다른 프로세스한테 데이터를 수신합니다.
B1, B2쓰레드는 A쓰레드가 받은 데이터를 분석합니다.
C쓰레드는 B1, B2쓰레드에게 받은 데이터를 처리합니다.
------>B1------>
----->A ------->C
------>B2------>
와 같은 순서로 데이터가 이동하게 됩니다.
여기서 제가 궁금한 것은 A가 데이터를 받으면 바로 B1, B2쓰레드에게 보낼 방법이 없느냐 입니다.
즉 저는 현재 시그널 슬롯을 lyse라는 메인쓰레드(?)에서 사용하여 A쓰레드의 시그널이 lyse에 갔다가 이를 다시 B쓰레드의 슬롯이 받는 방식입니다.
즉 lyse라는 메인쓰레드에 다음과 같은 코드가 있는 것이죠.
connect(&A, SIGNAL(notice(int, int)), &B1, SLOT(notice(int, int)));
connect(&A, SIGNAL(updated(int, int, int)), &B2, SLOT(updated(int, int, int)));
그런데 저는 그냥 이러한 코드를 A쓰레드나 B1, B2쓰레드에 두고 싶은데 방법이 없는지요??
사실 A, B1, B2쓰레드를 생성한 것은 lyse이기 때문에 A와 B1, B2는 lyse없이는 서로의 존재를 모르는 상태이지 않습니까?? 그래서 당연히 lyse를 거쳐야 하는 것 같은데 혹시 제가 잘못 알고 있는 것인지요??
B1,B2 생성자에 A의 레프런스를 넘겨주시면 될 것
B1,B2 생성자에 A의 레프런스를 넘겨주시면 될 것 같습니다.
모르면 알려주면 되지요.
모르면 알려주면 되지요.
connect 를 사용하신 다면
A, B1, B2 는 lyse 를 몰라도 됩니다.
connect 로 연결된 직후 더 이상 lyse는 필요하지 않을 것 같은데요.
signal/slot 을 써도 되지만 semaphore를 쓰면 더 쉬워질 것으로 보입니다.
QSemaphore 클래스를 한번 살펴 보세요.
댓글 달기