Qt에서 QTcpsocket으로 TCP통신을 할때 Thread관련 질문입니다.
글쓴이: kjhkjh724 / 작성시간: 목, 2015/10/29 - 4:32오후
QTcpsocket에서 입력받은 데이터를 읽을때 readyread() signal을 이용해서 하고 있는대 이때 QTcpsocket이 작동되는(?)Thread는 main Thread인가요?
또 데이터가 들어와서 event와 signal을 발생시키고 처리하는 Thread또한 Main Thread인가요?
readyread()를 signal로 받아 처리하게 되는 slot이 작동하는 Thread 또한 Main Thread인가요?
현제 제가 알기론 QThread를 서브클래싱하여 run()함수를 재정의 하여 run()함수 내부가 멀티 쓰레드가 되는걸로 알고있는대 그럼 그왜의 부분들은 전부 MAIN에서 돌아가나요?
Forums:
Signal Thread Qt 로 찾아보니. 비슷한 내용이 있네요.
- 스레드 갯수를 확인하기 어려우시면. 하나씩 코드를 지워보세요.
윈도우는 작업관리자'에서 스레드 갯수. GDI 갯수. HANDLE 갯수'를 확인하실 수 있습니다.
리눅스라면... 이런거로 확인 되는지 모르겠네요.
ps -aux
top
//리눅스 스레드 갯수'로 찾아보니. 여기서 확인 가능하다고 합니다.
http://raphaell.egloos.com/967138
cat /proc/1203/status
//------------------------------------------
Signal Thread Qt
http://www.google.co.kr/search?q=Signal+Thread+Qt&hl=ko&biw=&bih=&gbv=2&oq=Signal+Thread+Qt&gs_l=heirloom-serp.3..0i30j0i5i10i30j0i8i30l8.82152.83245.0.83611.3.3.0.0.0.0.204.531.0j2j1.3.0....0...1ac.1.34.heirloom-serp..0.3.530.dWFfBEfuRnI
Threads and QObjects
http://doc.qt.io/qt-4.8/threads-qobject.html
Per-Thread Event Loop
Signals and Slots Across Threads
[QT/X11] QThread에서 signal전달하기 예제
http://korone.net/bbs/board.php?bo_table=qt_lecture&wr_id=568
[SOLVED] Signals, slots and threads misunderstanding - help needed
http://www.qtforum.org/article/37881/solved-signals-slots-and-threads-misunderstanding-help-needed.html
How To Really, Truly Use QThreads; The Full Explanation
https://mayaposch.wordpress.com/2011/11/01/how-to-really-truly-use-qthreads-the-full-explanation/
http://www.mayaposch.com/
//------------------------------------------
How to emit cross-thread signal in Qt?
http://stackoverflow.com/questions/638251/how-to-emit-cross-thread-signal-in-qt
//--------------------------------------------------------
QTcpSocket Chat : Mutiple Client using FD_SET and select()
http://www.qtcentre.org/threads/9157-QTcpSocket-Chat-Mutiple-Client-using-FD_SET-and-select()
QThreadPool
http://www.bogotobogo.com/Qt/Qt5_QTcpServer_QThreadPool_Multithreaded_Client_Server.php
C++ GUI Programming with Qt4: Networking
http://www.informit.com/articles/article.aspx?p=1405552&seqNum=3
Fortune Client Example
http://doc.qt.io/qt-5/qtnetwork-fortuneclient-example.html
Threaded Fortune Server Example
http://doc.qt.io/qt-5/qtnetwork-threadedfortuneserver-example.html
QTcpSocket Class
http://doc.qt.io/qt-5/qtcpsocket.html
QTcpSocket: reading and writing
http://stackoverflow.com/questions/20546750/qtcpsocket-reading-and-writing
Qt5 Tutorial QTcpSocket with Signals and Slot
http://www.bogotobogo.com/Qt/Qt5_QTcpSocket_Signals_Slots.php
How to make QTcpSocket wait for receiving data
http://www.codeproject.com/Questions/824352/How-to-make-QTcpSocket-wait-for-receiving-data?arn=38
Qt for WinRT
http://doc.qt.io/qt-5/winrt-support.html
[QT/Win32] QTcpSocket 사용중에
http://www.korone.net/bbs/board.php?bo_table=qt_qna&wr_id=21387&sca=QT%2FWin32&page=5
QAbstractSocket Class
http://doc.qt.io/qt-5/qabstractsocket.html
Note: The returned QTcpSocket object cannot be used from another thread.
If you want to use an incoming connection from another thread, you need to override incomingConnection().
QTcpServer Class
http://doc.qt.io/qt-5/qtcpserver.html
QNetworkAccessManager Class
http://doc.qt.io/qt-5/qnetworkaccessmanager.html
QThreadPool Class
http://doc.qt.io/qt-5/qthreadpool.html
Multithreading Technologies in Qt
http://doc.qt.io/qt-5/threads-technologies.html
Qt5 Tutorial Asynchronous QTcpServer with QThreadPool - 2015
http://www.bogotobogo.com/Qt/Qt5_Asynchronous_QTcpServer_QThreadPool.php
QTcpServer with QThreadPool, for long term connections.
https://forum.qt.io/topic/5148/qtcpserver-with-qthreadpool-for-long-term-connections
How to pass a QTcpSocket to a QRunnable in Qt 5.2
http://stackoverflow.com/questions/23812483/how-to-pass-a-qtcpsocket-to-a-qrunnable-in-qt-5-2
Qt - QTcpServer using QThreadPool (The way to go of making a server)
https://gist.github.com/lamprosg/4593408
Client-Server application using thread pool - implementation suggestions
http://www.qtcentre.org/archive/index.php/t-22699.html
C++ Qt 69 - QTcpServer using QThreadPool
https://www.youtube.com/watch?v=xm_fkZolMFA
//------------------------------------------
Signal Thread
http://www.google.co.kr/search?q=Signal+Thread&hl=ko&biw=&bih=&gbv=2&oq=Signal+Thread&gs_l=heirloom-serp.12...297902.297902.1.298270.1.1.0.0.0.0.0.0..0.0....0...1ac.1.34.heirloom-serp..1.3.530.iMdI60YRwlU
----------------------------------------------------------------------------
젊음'은 모든것을 가능하게 만든다.
매일 1억명이 사용하는 프로그램을 함께 만들어보고 싶습니다.
정규 근로 시간을 지키는. 야근 없는 회사와 거래합니다.
각 분야별. 좋은 책'이나 사이트' 블로그' 링크 소개 받습니다. shintx@naver.com
보통 무조건 연결당 쓰레드를 만들게 프레임워크를
보통 무조건 연결당 쓰레드를 만들게 프레임워크를 만들지는 않는데요.(수십개 사례에서)
개인적으로 쓰레드 수준의 설정은 사용자가 선택하게 해주는게 정상적인 프레임워크라고 봅니다.
QT는 잊을만 하면 회자되네요.
확실하게는 소스를 보는게 맞는데. 구현이 설계서와 다른 경우도 많으니,...
소스나, 설계문서 보는게 시간이 걸린다면, 초딩시절해봤던 블랙박스 실험을 약간 해야겠네요.
맛을 보고, 냄새 맡아보고... ㅎㅎ
각설하고,
---------------------
linux 라면,
1) pthread 링크가 되었는지 검사해보고
$ ldd <실행파일명>
...
libpthread.so.0 => /lib/x86_64-linux-gnu/libpthread.so.0 (0x00007f79f660d000) <-- 쓰레드를 쓰기는 했구나라는 정도의 의미
...
2) 적절한 위치(알고 싶은 위치)에서
pthread_self() 값(쓰레드 id)을 출력해 보고,
컴파일시 -lpthread 해서 라이브러리 링크 해주시고.
3) 쉘에서 알아보려면...(해당 프로세스의 쓰레드가 몇 개인지 알아보기),
멀티쓰레드인 경우 특정 쓰레드중 하나가 멈추는 경우(버그)가 있을 수도 있으니, 테스트 단계에서 하시면 되겠지요.
$ ps -eLf
UID PID PPID LWP C NLWP STIME TTY TIME CMD
root 1 0 1 0 1 10:07 ? 00:00:00 /sbin/init
root 2 0 2 0 1 10:07 ? 00:00:00 [kthreadd]
root 3 2 3 0 1 10:07 ? 00:00:00 [ksoftirqd/0]
...
* 위 출력에서, LWP가 쓰레드 식별자(tid)입니다.
결론적으론
제가 문서의 내용을 이해한 대로라면 run()함수 내부 부분만 따로 하나의 루프를 도는 Thread이고 나머지는 호출되는 매모리 위치에 따라 다르겠지만 대부분 Main이라고 생각하면 되내요. 함수의 호출 위치가 Run내부인가 아닌가의 문제... 또한 그렇기 때문에 Run 내부에서 무언가를 생성하고 그에 연관된 부분을 외부에서 사용하면 2개가 생성되는... 예를 들면 QTcpSocket을 run 내부에서 생성한후 run()외부에서 포인터를 이용해 무언가를 하려고 하면 외부에 다시 생성되면서 Error가 발생하는군요... 제가 제대로 이해한건지 확신이 안들긴 하지만...
감사합니다.
http://doc.qt.io/qt-4.8/threads-qobject.html 이 문서에 관련 내용이 나와있내요.
Qt 프로그래밍 책
http://book.naver.com/search/search.nhn?sm=sta_hty.book&sug=&where=nexearch&query=Qt+%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%98%EB%B0%8D
Qt 책 참고해보세요.
----------------------------------------------------------------------------
젊음'은 모든것을 가능하게 만든다.
매일 1억명이 사용하는 프로그램을 함께 만들어보고 싶습니다.
정규 근로 시간을 지키는. 야근 없는 회사와 거래합니다.
각 분야별. 좋은 책'이나 사이트' 블로그' 링크 소개 받습니다. shintx@naver.com
댓글 달기