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:
Stefan Neis 2005-09-25 16:12:18 +00:00
parent ab0ad5f175
commit 8a077f2872
2 changed files with 28 additions and 2 deletions

View File

@ -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}

View File

@ -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 )