gpt4 book ai didi

c++ - QThread 的多个实例可以引用同一个操作系统线程吗?

转载 作者:行者123 更新时间:2023-11-28 05:25:27 28 4
gpt4 key购买 nike

我正在使用 QThread 作为线程管理器,我想知道是否可以实例化多个管理同一个线程的 QThread 对象?

最佳答案

当然没有。

单个线程只能由 1 个 QThread 管理,因为它将在 void QThread::start(Priority) 内部创建,无法将线程设置为 QThread

来自 qthread_unix.cpp

int code = pthread_create(&threadId, &attr, QThreadPrivate::start, this);

pthread_create将开始一个新线程。

来自 qthread_win.cpp

#if defined(Q_CC_MSVC) && !defined(_DLL) // && !defined(Q_OS_WINRT)
# ifdef Q_OS_WINRT
// If you wish to accept the memory leaks, uncomment the part above.
// See:
// https://support.microsoft.com/en-us/kb/104641
// https://msdn.microsoft.com/en-us/library/kdzttdcb.aspx
# error "Microsoft documentation says this combination leaks memory every time a thread is started. " \
"Please change your build back to -MD/-MDd or, if you understand this issue and want to continue, " \
"edit this source file."
# endif
// MSVC -MT or -MTd build
d->handle = (Qt::HANDLE) _beginthreadex(NULL, d->stackSize, QThreadPrivate::start,
this, CREATE_SUSPENDED, &(d->id));
#else
// MSVC -MD or -MDd or MinGW build
d->handle = (Qt::HANDLE) CreateThread(NULL, d->stackSize, (LPTHREAD_START_ROUTINE)QThreadPrivate::start,
this, CREATE_SUSPENDED, reinterpret_cast<LPDWORD>(&d->id));
#endif // Q_OS_WINRT

两者都是CreateThread_beginthreadex当然会创建一个新线程。

关于c++ - QThread 的多个实例可以引用同一个操作系统线程吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40645483/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com