2010-11-10 15 views
8

Mam krótkie pytanie. Mam stworzyć mały program wielowątkowy do pobierania danych z wielu czujników i mam wiedzę zarówno o pthreadach, jak i qthreadach. Mam dostęp do obu bibliotek. osobiście jestem stronniczy w używaniu Qt ze względu na jego konstrukcję i różne funkcjonalności. Ale czy jest jakaś znacząca korzyść z używania jednego z drugim? DziękiQThreads Vs Pthreads

Odpowiedz

8

QThreads są zbudowane na pthreadach. Zapewniają abstrakcję obiektową, ułatwiającą pracę z wątkami. Poza tym, że QThreads są przenośne, mogą działać w dowolnym systemie, używając podstawowego systemu wątków, podczas gdy pthreads są specyficzne dla systemów POSIX.

Niemal tylko wadą używania QThreads jest to, że musisz połączyć swoją aplikację z Qt; ta zależność może sprawić, że nieco trudniej będzie rozpowszechnić twoją aplikację.

+0

Ya .. Po prostu patrzyłem na to i wygląda tak wewnętrznie, jak to się robi. Dzięki, Peoro. Naprawdę szukałem, jeśli tryLock() jest zaimplementowany przy użyciu pthread_mutex_trylock. Myślę, że tak jest. – blueskin

+2

Jedyny problem z dystrybucją polega na tym, że musisz dołączyć licencję LGPL wraz z kodem, gdy dynamicznie łączysz się z bibliotekami qt (przy założeniu, że używasz wersji źródłowej open source, a nie komercyjnej). W systemie Windows, jeśli nie masz pewności, które pliki DLL będą potrzebne do rozpowszechniania, użyj polecenia "depend.exe", a ono powie dokładnie! http://www.dependencywalker.com/ – g19fanatic

2

Myślę, że w samym sercu rzeczy, QThread pod Linuksem używa pthread. Nie jestem pewien, co kryje się pod maską Windows. O ile nie ma pewnych specyficznych funkcji API, które są ci niedostępne w QThread, pozostanę przy QThread tylko po to, aby skorzystać z możliwości przenoszenia, jakie ci to daje. Nie spodziewałbym się żadnej znaczącej różnicy w wydajności. Qthread pozwoli ci również użyć mechanizmu sygnał/slot przez granice wątków.

4

Ale musisz wiedzieć, co QThreads używa pętli zdarzeń do zarządzania tym, więc nie możesz po prostu zabić wątku jak z pthread. Jeśli wątki wykonują długą i ciężką pracę, nie można go zatrzymać, dopóki nie zostanie zwolniony. W niektórych przypadkach jest to ważne.

Powiązane problemy