gpt4 book ai didi

c++ - 纯 C++ 中的多线程?

转载 作者:塔克拉玛干 更新时间:2023-11-03 08:15:46 25 4
gpt4 key购买 nike

让我澄清一下,我知道 c++11 中添加了多线程支持。但在此更新之前,多线程只能在 C++ 中的 Qt 中完成。所以,

  1. Qt 如何提供此功能而不是标准 C++?
  2. 人们如何对他们的“纯”C++(没有像 Qt、FLTK+ 这样的库)应用程序进行多线程处理?我对使用 MinGW 编译器的人感兴趣。

最佳答案

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

回答您的问题:

  1. 已经回答。 C++11 实现中的线程支持以相同的方式实现(有一点不同——gcc 不需要支持 Win32 线程,如果它们只为一个系统编写,Microsoft VC 也不需要支持 pthreads。Qt 是多平台的库,因此它需要包含对所有平台的支持)。

  2. 使用低级系统调用,例如(pthread_createCreateThread 等)。

关于c++ - 纯 C++ 中的多线程?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18769794/

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