Qt использует различные библиотеки потоков для разных операционных систем. Например, в Unix вы можете использовать pthreads, а в Windows вы можете использовать поддержку WinAPI (например, функцию CreateThread
).
Например, Qt использует этот код для создания потока в системах Unix:
int code =
pthread_create(&d->thread_id, &attr, QThreadPrivate::start, this);
и это создать его в системе Windows:
d->handle = (Qt::HANDLE) _beginthreadex(NULL, d->stackSize, QThreadPrivate::start,
this, CREATE_SUSPENDED, &(d->id));
Все это заворачивается с помощью препроцессора, так правильная библиотека используется для правильной системы. Посмотрите на этот код внутри qthread_p.h
и все должно быть ясно, лет:
#ifdef Q_OS_UNIX
pthread_t thread_id;
QWaitCondition thread_done;
static void *start(void *arg);
#if defined(Q_OS_SYMBIAN)
static void finish(void *arg, bool lockAnyway=true, bool closeNativeHandle=true);
#else
static void finish(void *);
#endif
#endif // Q_OS_UNIX
#if defined(Q_OS_WIN32) || defined(Q_OS_WINCE)
HANDLE handle;
unsigned int id;
int waiters;
static unsigned int __stdcall start(void *);
static void finish(void *, bool lockAnyway=true);
#endif // Q_OS_WIN32
Чтобы ответить на ваши вопросы:
уже ответил. Поддержка потоков в реализациях C++ 11 реализована одинаково (с небольшой разницей - gcc не нуждается в поддержке потоков Win32, а Microsoft VC не нуждается в поддержке pthreads, если они написаны только для одной системы. Qt - мультиплатформенный библиотеки, поэтому необходимо включить поддержку всех платформ).
Использование системных вызовов низкого уровня, таких как (pthread_create
, CreateThread
и т. Д.).
Hi Nemanja, Спасибо за ваш быстрый ответ! Теперь я понимаю, что Qt использует библиотеки из ОС для многопоточности. Итак, в C++ 11 происходит то же самое? –
@Cool_Coder да, стандартная библиотека должна использовать разные, специфичные для ОС, вызовы для поддержки потоков в разных системах. –
Да, C++ 11 поместит onus на разработчика, чтобы предоставить библиотеки потоков, поддерживаемые собственной библиотекой ОС. –