본문 바로가기

IT/QT

QT에서 Multi-Thread Socket 구현시 고려해야 할 사항


QT 로 Socket Multi-Thread 구현시에 Main Thread이외의 Socket Thread 구현하는 경우

대부분의 example source는 event loop를 사용하는 thread를 사용한다.


thread::run()에서 은 event loop를 받을수 있는 방법과 없는 방법이 있는데, 하기의 싸이트를 참조 한다.

https://conf.qtcon.org/system/attachments/104/original/multithreading-with-qt.pdf%3F1473018682


이벤트 Loop를 받는 경우

thread::run( )

{

....

connect(....)

exec();

}


이벤트 Loop를 받지 않는 경우


thread::run( )

{

while(1)

{

...

QThread::sleep(1);

}

}




readyRead()의 이벤트 발생시 socket->readAll() 이후 socket->write()로 하는 방법으로

에제들이 소개 되어 있는데,  read 이벤트 후에 write 하지 않지 않는 경우도 생긴다.


따로 thread 를 돌려 write를 처리 해야 하고싶다면,  그에 대한 방법을 제시한다.

http://www.qtcentre.org/threads/24370-Creating-a-QTcpSocket-or-a-QTcpServer-in-a-thread-other-than-the-main-thread


정리하면 moveThread , QTimer::singleShot() 를 이용하여 구현 한다는 내용이다.


아래의 싸이트를 참고하여 구현하면 쉽게 구현이 가능하다.

이때 중요한점은 moveThread를 꼭해주어야 하며, 이에 대한 내용은 다음 싸이드를 참고한다.

http://hirotaka-hachiya.hatenablog.com/entry/2016/05/28/230142














반응형