C++ 为将来的QThreadPool线程和/或pthread_create调用设置默认堆栈大小

C++ 为将来的QThreadPool线程和/或pthread_create调用设置默认堆栈大小,c++,c,pthreads,stack,qtconcurrent,C++,C,Pthreads,Stack,Qtconcurrent,我使用的是QtConcurrent/QThreadPool,它创建的线程堆栈大小在Mac OS X 10.8(512kB)上太小,但在CentOS 5.9(10MB)上却很好 我希望有一个解决方法,可以为新线程的堆栈大小设置一些进程范围的默认值。我只关心POSIX类系统(Mac和Linux),暂时不关心Windows 我的问题是在运行程序之前,如何从程序内部或通过环境变量或其他方式设置新QThreadPool线程的默认堆栈大小? 通过为pthread\u create创建的线程设置默认值来实现此

我使用的是QtConcurrent/QThreadPool,它创建的线程堆栈大小在Mac OS X 10.8(512kB)上太小,但在CentOS 5.9(10MB)上却很好

我希望有一个解决方法,可以为新线程的堆栈大小设置一些进程范围的默认值。我只关心POSIX类系统(Mac和Linux),暂时不关心Windows

我的问题是在运行程序之前,如何从程序内部或通过环境变量或其他方式设置新QThreadPool线程的默认堆栈大小?

通过为
pthread\u create
创建的线程设置默认值来实现此效果的答案也很有用


在我试图解决这个问题的过程中:

我的直觉是,Qt正在幕后使用pthreads,如果我可以更改pthreads的默认堆栈大小,我的问题可能会得到解决

pthread文档说明:

描述

pthread_create()函数用于创建新线程,其中 由attr在进程内指定的属性如果attr为NULL,则 使用默认属性。等等

我知道如何获取默认值:

   size_t stacksize;
   pthread_attr_t attr;
   pthread_attr_init(&attr);
   pthread_attr_getstacksize (&attr, &stacksize);
但是我还没有找到一种设置默认值的方法-只是通过将
pthread\u attr\u t
传递到
pthread\u create
来设置大小

有没有办法设置默认值


是否有一些环境变量或其他方法影响默认值?

运行此代码以扩展进程堆栈大小

对于Mac OS X和Linux:

#include <sys/resource.h>
#include <sys/types.h>
#include <sys/time.h>

...
rlimit limits;
getrlimit(RLIMIT_STACK, &limits);
limits.rlim_cur = <new process stack size (up to limits.rlim_max)>;
setrlimit(RLIMIT_STACK, &limits);
...
#包括
#包括
#包括
...
限制;
getrlimit(RLIMIT_堆栈和限制);
limits.rlim_cur=;
setrlimit(RLIMIT_堆栈和限制);
...


对于Linux和类似的Darwin

,我怀疑这取决于操作系统,即使它们都是POSIX系统。也就是说,您可以在Linux上以一种方式进行操作,在BSD上以另一种方式进行操作(OSX是BSD的衍生产品)。我还怀疑你不能在每个进程的基础上完成这项工作,只能在全球系统范围内完成。我目前的问题是,代码需要彻底检查,以避免使用QtConcurrent。如果你同时知道如何解决这个问题,那可能会有帮助。。。
#include <sys/resource.h>
#include <sys/types.h>
#include <sys/time.h>

...
rlimit limits;
getrlimit(RLIMIT_STACK, &limits);
limits.rlim_cur = <new process stack size (up to limits.rlim_max)>;
setrlimit(RLIMIT_STACK, &limits);
...