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를 처리 해야 하고싶다면, 그에 대한 방법을 제시한다.
정리하면 moveThread , QTimer::singleShot() 를 이용하여 구현 한다는 내용이다.
아래의 싸이트를 참고하여 구현하면 쉽게 구현이 가능하다.
이때 중요한점은 moveThread를 꼭해주어야 하며, 이에 대한 내용은 다음 싸이드를 참고한다.
http://hirotaka-hachiya.hatenablog.com/entry/2016/05/28/230142