Added auto-destruction in wxThread::Delete and wxThread::Kill
Fixed thread destruction in thread sample
git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@3229
c3d73ce0-8a6f-49c7-b76d-
6d57e0e08775
\helpref{wxStreamBuffer}{wxstreamBuffer}
\helpref{wxStreamBuffer}{wxstreamBuffer}
-\wxheading{Remark}
-
-You can create a similar stream by this way:
-
-\begin{verbatim}
- wxStreamBuffer *sb = new wxStreamBuffer(wxStreamBuffer::read);
- wxInputStream *input = new wxInputStream(sb);
-
- sb->SetBufferIO(data, data\_end);
-\end{verbatim}
-
% ----------
% Members
% ----------
% ----------
% Members
% ----------
\helpref{wxStreamBuffer}{wxstreamBuffer}
\helpref{wxStreamBuffer}{wxstreamBuffer}
-\wxheading{Remark}
-
-You can create a similar stream by this way:
-
-\begin{verbatim}
- wxStreamBuffer *sb = new wxStreamBuffer(wxStreamBuffer::write);
- wxOutputStream *input = new wxOutputStream(sb);
-
- // If there are data
- sb->SetBufferIO(data, data\_end);
- // Else
- sb->Fixed(FALSE);
-\end{verbatim}
-
-This way is also useful to create read/write memory stream:
-
-\begin{verbatim}
- wxStreamBuffer *sb = new wxStreamBuffer(wxStreamBuffer::read\_write);
- wxOutputStream *output = new wxOutputStream(sb);
- wxInputStream *input = new wxInputStream(sb);
-
- // If there are data
- sb->SetBufferIO(data, data\_end);
- // Else
- sb->Fixed(FALSE);
-\end{verbatim}
-
% ----------
% Members
% ----------
% ----------
% Members
% ----------
+\membersection{wxMemoryOutputStream::CopyTo}
+
+\constfunc{size\_t}{CopyTo}{\param{char *}{buffer}, \param{size\_t }{len}}
+
+CopyTo allowed you to transfer data from the internal buffer of
+wxMemoryOutputStream to an external buffer. \it{len} specifies the size of
+the buffer.
+
+\wxheading{Returned value}
+
+CopyTo returns the number of bytes copied to the buffer. Generally it is either
+len or the size of the stream buffer.
GSOCK_INVADDR,
GSOCK_INVSOCK,
GSOCK_NOHOST,
GSOCK_INVADDR,
GSOCK_INVSOCK,
GSOCK_NOHOST,
+ GSOCK_INVPORT,
+ GSOCK_TRYAGAIN
} GSocketError;
typedef enum {
} GSocketError;
typedef enum {
size_t count = m_threads.Count();
for ( size_t i = 0; i < count; i++ )
{
size_t count = m_threads.Count();
for ( size_t i = 0; i < count; i++ )
{
- m_threads[i]->Delete();
+ // We must always use 0 because Delete() calls OnThreadExit() and
+ // OnThreadExit() removed 0 from the array.
+ m_threads[0]->Delete();
wxPendingEvents->Append(this);
wxPendingEventsLocker->Leave();
wxPendingEvents->Append(this);
wxPendingEventsLocker->Leave();
+ // TODO: Wake up idle handler for the other platforms.
#ifdef __WXGTK__
if (g_isIdle)
wxapp_install_idle_handler();
#ifdef __WXGTK__
if (g_isIdle)
wxapp_install_idle_handler();
+ pthread_mutexattr_t attr_type;
+
+ pthread_mutexattr_settype( &attr_type, PTHREAD_MUTEX_FAST_NP );
+
p_internal = new wxMutexInternal;
p_internal = new wxMutexInternal;
- pthread_mutex_init( &(p_internal->p_mutex), (const pthread_mutexattr_t*) NULL );
+ pthread_mutex_init( &(p_internal->p_mutex), (const pthread_mutexattr_t*) &attr_type );
// wait until the thread stops
p_internal->Wait();
}
// wait until the thread stops
p_internal->Wait();
}
+ //GL: As we must auto-destroy, the destruction must happen here.
+ delete this;
return wxTHREAD_MISC_ERROR;
}
return wxTHREAD_MISC_ERROR;
}
+ //GL: As we must auto-destroy, the destruction must happen here (2).
+ delete this;
return wxTHREAD_NO_ERROR;
}
return wxTHREAD_NO_ERROR;
}