Ich habe eine kurze Frage. Ich soll ein kleines Multithread-Programm erstellen, um Daten von mehreren Sensoren zu erfassen, und ich habe Kenntnisse sowohl von Pthreads und qthreads. Ich habe Zugriff auf beide Bibliotheken. persönlich bin ich voreingenommen gegenüber Qt wegen seines Designs und verschiedener Funktionalitäten. Aber gibt es einen signifikanten Vorteil bei der Verwendung von einem gegen den anderen? DankeQThreads Vs Pthreads
Antwort
QThreads sind auf Pthreads aufgebaut. Sie bieten eine objektorientierte Abstraktion, die das Arbeiten mit Threads erleichtert. Abgesehen davon, dass QThreads portierbar sind, können sie auf jedem System laufen, das das zugrundeliegende Thread-System verwendet, während PThreads spezifisch für POSIX-Systeme sind.
Der fast einzige Nachteil der Verwendung von QThreads ist, dass Sie Ihre Anwendung mit Qt verknüpfen müssen; Diese Abhängigkeit könnte die Verbreitung Ihrer Anwendung etwas erschweren.
Ich denke, im Herzen der Dinge, QThread
unter Linux verwendet pthread
. Ich bin nicht sicher, was für die Windows-Seite unter der Haube ist. Es sei denn, es gibt einige spezifische pthread
API-Funktionen, die Sie benötigen, die nicht mit QThread
verfügbar sind, würde ich mit QThread
nur bleiben, um von der Portabilität zu profitieren, die es Ihnen geben wird. Ich würde nicht erwarten, dass es einen signifikanten Leistungsunterschied geben würde. Qthread
können Sie auch den Signal/Slot-Mechanismus über Thread-Grenzen hinweg verwenden.
Aber Sie müssen wissen, was QThreads Event-Loop für die Verwaltung verwenden, so können Sie nicht Thread wie mit Pthread einfach töten. Wenn Threads lange und hart arbeiten, ist es nicht möglich, sie zu stoppen, solange sie nicht freigegeben werden. In einigen Fällen ist es wichtig.
Ya .. Ich habe es nur angeschaut und es sieht intern so aus, wie es gemacht wird. Danke peoro. Ich suchte eigentlich spezifisch, wenn tryLock() mit pthread_mutex_tryclock implementiert wird. Ich denke, so ist es. – blueskin
Das einzige Verteilungsproblem besteht darin, dass Sie die LGPL-Lizenz zusammen mit Ihrem Code einbinden müssen, wenn Sie eine dynamische Verknüpfung mit den qt-Bibliotheken herstellen (vorausgesetzt, Sie verwenden die Open Source-Version und nicht die kommerzielle Quellversion). Unter Windows, wenn Sie nicht sicher sind, welche DLLS Sie benötigen, um zu verteilen, verwenden Sie 'depends.exe' und es wird Ihnen genau sagen! http://www.dependencywalker.com/ – g19fanatic