Applied [ 1186782 ] Setting thread stack size on Unix.
git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@35682 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
parent
ab0ad5f175
commit
8a077f2872
@ -84,7 +84,22 @@ stack.
|
||||
Creates a new thread. The thread object is created in the suspended state, and you
|
||||
should call \helpref{Run}{wxthreadrun} to start running it. You may optionally
|
||||
specify the stack size to be allocated to it (Ignored on platforms that don't
|
||||
support setting it explicitly, eg. Unix).
|
||||
support setting it explicitly, eg. Unices without pthread_attr_setstacksize).
|
||||
If you do not specify the stack size, the system's default value is used.
|
||||
|
||||
{\bf Warning:} It is a good idea to explicitly specify a value as systems'
|
||||
default values vary from just a couple of kByte on some systems (BSD and
|
||||
OS/2 systems) to one or several MByte (Windows, Solaris, Linux). So, if you
|
||||
have a thread that requires more than just a few kBytes of memory, you will
|
||||
have mysterious problems on some platforms but not on the common ones. OTOH
|
||||
just indicating a large stack size by default will give you performance
|
||||
issues on those systems with small default stack since those typically use
|
||||
fully committed memory for the stack.
|
||||
If, on the other hand you use lots of threads (say several hundred, which
|
||||
often indicates a design flaw), virtual adress space can get tight unless
|
||||
you explicitly specify a smaller amount of thread stack space for each
|
||||
thread.
|
||||
|
||||
|
||||
\wxheading{Return value}
|
||||
|
||||
|
@ -1058,7 +1058,13 @@ wxThread::wxThread(wxThreadKind kind)
|
||||
m_isDetached = kind == wxTHREAD_DETACHED;
|
||||
}
|
||||
|
||||
wxThreadError wxThread::Create(unsigned int WXUNUSED(stackSize))
|
||||
#ifdef HAVE_PTHREAD_ATTR_SETSTACKSIZE
|
||||
#define WXUNUSED_STACKSIZE(identifier) identifier
|
||||
#else
|
||||
#define WXUNUSED_STACKSIZE(identifier) WXUNUSED(identifier)
|
||||
#endif
|
||||
|
||||
wxThreadError wxThread::Create(unsigned int WXUNUSED_STACKSIZE(stackSize))
|
||||
{
|
||||
if ( m_internal->GetState() != STATE_NEW )
|
||||
{
|
||||
@ -1070,6 +1076,11 @@ wxThreadError wxThread::Create(unsigned int WXUNUSED(stackSize))
|
||||
pthread_attr_t attr;
|
||||
pthread_attr_init(&attr);
|
||||
|
||||
#ifdef HAVE_PTHREAD_ATTR_SETSTACKSIZE
|
||||
if (stackSize)
|
||||
pthread_attr_setstacksize(&attr, stackSize);
|
||||
#endif
|
||||
|
||||
#ifdef HAVE_THREAD_PRIORITY_FUNCTIONS
|
||||
int policy;
|
||||
if ( pthread_attr_getschedpolicy(&attr, &policy) != 0 )
|
||||
|
Loading…
Reference in New Issue
Block a user