2010-11-10 2 views
8

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

8

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.

+0

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

+2

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

2

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.

4

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.