Triued in vain to fix threads segvs with gcc
Removed wxDebugStream git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@1308 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
@@ -16,17 +16,16 @@
|
||||
#pragma interface "thread.h"
|
||||
#endif
|
||||
|
||||
// ----------------------------------------------------------------------------
|
||||
// headers
|
||||
// ----------------------------------------------------------------------------
|
||||
#include "wx/object.h"
|
||||
#include "wx/setup.h"
|
||||
#include "wx/module.h"
|
||||
|
||||
// ----------------------------------------------------------------------------
|
||||
// constants
|
||||
// ----------------------------------------------------------------------------
|
||||
|
||||
typedef enum {
|
||||
typedef enum
|
||||
{
|
||||
wxMUTEX_NO_ERROR = 0,
|
||||
wxMUTEX_DEAD_LOCK, // Mutex has been already locked by THE CALLING thread
|
||||
wxMUTEX_BUSY, // Mutex has been already locked by ONE thread
|
||||
@@ -34,7 +33,8 @@ typedef enum {
|
||||
wxMUTEX_MISC_ERROR
|
||||
} wxMutexError;
|
||||
|
||||
typedef enum {
|
||||
typedef enum
|
||||
{
|
||||
wxTHREAD_NO_ERROR = 0, // No error
|
||||
wxTHREAD_NO_RESOURCE, // No resource left to create a new thread
|
||||
wxTHREAD_RUNNING, // The thread is already running
|
||||
@@ -42,16 +42,25 @@ typedef enum {
|
||||
wxTHREAD_MISC_ERROR // Some other error
|
||||
} wxThreadError;
|
||||
|
||||
// defines the interval of priority.
|
||||
/* defines the interval of priority. */
|
||||
#define WXTHREAD_MIN_PRIORITY 0
|
||||
#define WXTHREAD_DEFAULT_PRIORITY 50
|
||||
#define WXTHREAD_MAX_PRIORITY 100
|
||||
|
||||
// ----------------------------------------------------------------------------
|
||||
// GUI mutex handling.
|
||||
// ----------------------------------------------------------------------------
|
||||
|
||||
void WXDLLEXPORT wxMutexGuiEnter();
|
||||
void WXDLLEXPORT wxMutexGuiLeave();
|
||||
|
||||
// ----------------------------------------------------------------------------
|
||||
// Mutex handler
|
||||
// ----------------------------------------------------------------------------
|
||||
|
||||
class WXDLLEXPORT wxMutexInternal;
|
||||
class WXDLLEXPORT wxMutex {
|
||||
class WXDLLEXPORT wxMutex
|
||||
{
|
||||
public:
|
||||
// constructor & destructor
|
||||
wxMutex();
|
||||
@@ -77,8 +86,10 @@ protected:
|
||||
// ----------------------------------------------------------------------------
|
||||
// Condition handler.
|
||||
// ----------------------------------------------------------------------------
|
||||
|
||||
class wxConditionInternal;
|
||||
class WXDLLEXPORT wxCondition {
|
||||
class WXDLLEXPORT wxCondition
|
||||
{
|
||||
public:
|
||||
// constructor & destructor
|
||||
wxCondition();
|
||||
@@ -100,8 +111,10 @@ private:
|
||||
// ----------------------------------------------------------------------------
|
||||
// Thread management class
|
||||
// ----------------------------------------------------------------------------
|
||||
|
||||
class wxThreadInternal;
|
||||
class WXDLLEXPORT wxThread {
|
||||
class WXDLLEXPORT wxThread
|
||||
{
|
||||
public:
|
||||
// constructor & destructor.
|
||||
wxThread();
|
||||
@@ -165,11 +178,20 @@ private:
|
||||
};
|
||||
|
||||
// ----------------------------------------------------------------------------
|
||||
// Global functions and variables
|
||||
// Automatic initialization
|
||||
// ----------------------------------------------------------------------------
|
||||
|
||||
// GUI mutex handling.
|
||||
void WXDLLEXPORT wxMutexGuiEnter();
|
||||
void WXDLLEXPORT wxMutexGuiLeave();
|
||||
class wxThreadModule : public wxModule
|
||||
{
|
||||
DECLARE_DYNAMIC_CLASS(wxThreadModule)
|
||||
|
||||
public:
|
||||
wxThreadModule() {}
|
||||
|
||||
virtual bool OnInit();
|
||||
virtual void OnExit();
|
||||
};
|
||||
|
||||
|
||||
|
||||
#endif // __THREADH__
|
||||
|
@@ -157,46 +157,6 @@ WXDLLEXPORT wxWindow* wxFindWindowByName(const wxString& name, wxWindow *parent
|
||||
// Returns menu item id or -1 if none.
|
||||
WXDLLEXPORT int wxFindMenuItemId(wxFrame *frame, const wxString& menuString, const wxString& itemString);
|
||||
|
||||
// A debugging stream buffer.
|
||||
// Under Windows, this writes to the Windows debug output.
|
||||
// Under other platforms, it writes to cerr.
|
||||
|
||||
// ALl this horrible gubbins required for Borland, because the calling
|
||||
// convention needs to be the same as for streambuf.
|
||||
// Thanks to Gerhard.Vogt@embl-heidelberg.de for this solution.
|
||||
|
||||
#if defined(__BORLANDC__) && defined(__BCOPT__) && !defined(_RTL_ALLOW_po) && !defined(__FLAT__)
|
||||
#pragma option -po-
|
||||
#endif
|
||||
|
||||
// Can't export a class derived from a non-export class
|
||||
#if !defined(_WINDLL) && !defined(WXUSINGDLL)
|
||||
|
||||
// #ifdef new
|
||||
// #undef new
|
||||
// #endif
|
||||
|
||||
class WXDLLEXPORT wxDebugStreamBuf: public streambuf
|
||||
{
|
||||
public:
|
||||
wxDebugStreamBuf(void);
|
||||
~wxDebugStreamBuf(void) {}
|
||||
|
||||
int overflow(int i);
|
||||
inline int underflow(void) { return EOF; }
|
||||
int sync(void);
|
||||
};
|
||||
|
||||
// #if defined(__WXDEBUG__) && wxUSE_GLOBAL_MEMORY_OPERATORS
|
||||
// #define new WXDEBUG_NEW
|
||||
// #endif
|
||||
|
||||
#endif
|
||||
|
||||
#if defined(__BORLANDC__) && defined(__BCOPT__) && !defined(_RTL_ALLOW_po) && !defined(__FLAT__)
|
||||
#pragma option -po.
|
||||
#endif
|
||||
|
||||
/*
|
||||
#if (!defined(__MINMAX_DEFINED) && !defined(max))
|
||||
#define max(a,b) (((a) > (b)) ? (a) : (b))
|
||||
@@ -204,6 +164,7 @@ class WXDLLEXPORT wxDebugStreamBuf: public streambuf
|
||||
#define __MINMAX_DEFINED 1
|
||||
#endif
|
||||
*/
|
||||
|
||||
#define wxMax(a,b) (((a) > (b)) ? (a) : (b))
|
||||
#define wxMin(a,b) (((a) < (b)) ? (a) : (b))
|
||||
|
||||
|
@@ -17,7 +17,7 @@ BIN_OBJ=\
|
||||
test.o
|
||||
|
||||
# additional things needed to link
|
||||
BIN_LINK= $(THREADS_LINK)
|
||||
BIN_LINK=
|
||||
|
||||
# additional things needed to compile
|
||||
ADD_COMPILE=
|
||||
|
@@ -104,10 +104,6 @@ $(GUI_TK_INCLUDE) \
|
||||
$(OPENGL_INCLUDE) \
|
||||
$(X_CFLAGS)
|
||||
|
||||
# -I$(WXBASEDIR)/src/png \
|
||||
# -I$(WXBASEDIR)/src/zlib \
|
||||
# -I$(WXBASEDIR)/src/gdk_imlib \
|
||||
|
||||
WX_LIBS = -L$(GLOBAL_LIB_DIR) $(WX_LINK)
|
||||
|
||||
OPENGL_LIBS = $(OPENGL_LIBRARY) $(OPENGL_LINK)
|
||||
|
@@ -562,54 +562,6 @@ wxFindMenuItemId (wxFrame * frame, const wxString& menuString, const wxString& i
|
||||
return menuBar->FindMenuItem (menuString, itemString);
|
||||
}
|
||||
|
||||
/*
|
||||
* wxDebugStreamBuf
|
||||
*/
|
||||
#if !defined(_WINDLL)
|
||||
|
||||
wxDebugStreamBuf::wxDebugStreamBuf(void)
|
||||
{
|
||||
// <iostream> usage doesn't need this, and i have no idea how to simulate it.
|
||||
#if wxUSE_IOSTREAMH
|
||||
if (allocate())
|
||||
setp(base(),ebuf());
|
||||
#endif
|
||||
}
|
||||
|
||||
int wxDebugStreamBuf::overflow(int WXUNUSED(i))
|
||||
{
|
||||
int len = pptr() - pbase();
|
||||
char *txt = new char[len+1];
|
||||
strncpy(txt, pbase(), len);
|
||||
txt[len] = '\0';
|
||||
#ifdef __WXMSW__
|
||||
OutputDebugString((LPCSTR)txt);
|
||||
#else
|
||||
fprintf(stderr, txt);
|
||||
#endif
|
||||
setp(pbase(), epptr());
|
||||
delete[] txt;
|
||||
return EOF;
|
||||
}
|
||||
|
||||
int wxDebugStreamBuf::sync(void)
|
||||
{
|
||||
int len = pptr() - pbase();
|
||||
char *txt = new char[len+1];
|
||||
strncpy(txt, pbase(), len);
|
||||
txt[len] = '\0';
|
||||
#ifdef __WXMSW__
|
||||
OutputDebugString((LPCSTR)txt);
|
||||
#else
|
||||
fprintf(stderr, txt);
|
||||
#endif
|
||||
setp(pbase(), epptr());
|
||||
delete[] txt;
|
||||
return 0;
|
||||
}
|
||||
|
||||
#endif
|
||||
|
||||
/*
|
||||
On Fri, 21 Jul 1995, Paul Craven wrote:
|
||||
|
||||
|
@@ -191,21 +191,21 @@ void wxApp::OnIdle( wxIdleEvent &event )
|
||||
{
|
||||
static bool inOnIdle = FALSE;
|
||||
|
||||
// Avoid recursion (via ProcessEvent default case)
|
||||
/* Avoid recursion (via ProcessEvent default case) */
|
||||
if (inOnIdle)
|
||||
return;
|
||||
|
||||
inOnIdle = TRUE;
|
||||
|
||||
// 'Garbage' collection of windows deleted with Close().
|
||||
/* 'Garbage' collection of windows deleted with Close(). */
|
||||
DeletePendingObjects();
|
||||
|
||||
// flush the logged messages if any
|
||||
wxLog *pLog = wxLog::GetActiveTarget();
|
||||
if (pLog != NULL && pLog->HasPendingMessages())
|
||||
pLog->Flush();
|
||||
/* flush the logged messages if any */
|
||||
wxLog *log = wxLog::GetActiveTarget();
|
||||
if (log != NULL && log->HasPendingMessages())
|
||||
log->Flush();
|
||||
|
||||
// Send OnIdle events to all windows
|
||||
/* Send OnIdle events to all windows */
|
||||
bool needMore = SendIdleEvents();
|
||||
|
||||
if (needMore)
|
||||
@@ -372,14 +372,6 @@ int wxEntry( int argc, char *argv[] )
|
||||
|
||||
wxClassInfo::InitializeClasses();
|
||||
|
||||
/* Debug stream no longer used
|
||||
#if (defined(__WXDEBUG__) && wxUSE_MEMORY_TRACING) || wxUSE_DEBUG_CONTEXT
|
||||
|
||||
streambuf* sBuf = new wxDebugStreamBuf;
|
||||
ostream* oStr = new ostream(sBuf) ;
|
||||
wxDebugContext::SetStream(oStr, sBuf);
|
||||
#endif
|
||||
*/
|
||||
|
||||
if (!wxTheApp)
|
||||
{
|
||||
@@ -474,7 +466,6 @@ int wxEntry( int argc, char *argv[] )
|
||||
wxDebugContext::Dump();
|
||||
wxDebugContext::PrintStatistics();
|
||||
}
|
||||
// wxDebugContext::SetStream(NULL, NULL);
|
||||
|
||||
#endif
|
||||
|
||||
|
@@ -160,15 +160,10 @@ void wxThread::OnExit()
|
||||
}
|
||||
|
||||
|
||||
// Automatic initialization
|
||||
class wxThreadModule : public wxModule {
|
||||
DECLARE_DYNAMIC_CLASS(wxThreadModule)
|
||||
public:
|
||||
bool OnInit();
|
||||
void OnExit();
|
||||
};
|
||||
IMPLEMENT_DYNAMIC_CLASS(wxThreadModule, wxModule)
|
||||
|
||||
bool wxThreadModule::OnInit() {
|
||||
bool wxThreadModule::OnInit()
|
||||
{
|
||||
wxMainMutex = new wxMutex();
|
||||
wxMainMutex->Lock();
|
||||
return TRUE;
|
||||
@@ -180,7 +175,7 @@ void wxThreadModule::OnExit()
|
||||
delete wxMainMutex;
|
||||
}
|
||||
|
||||
IMPLEMENT_DYNAMIC_CLASS(wxThreadModule, wxModule)
|
||||
|
||||
|
||||
void wxMutexGuiEnter()
|
||||
{
|
||||
|
@@ -43,7 +43,7 @@ enum thread_state
|
||||
|
||||
static pthread_t p_mainid;
|
||||
|
||||
wxMutex *wxMainMutex; // controls access to all GUI functions
|
||||
wxMutex *wxMainMutex; /* controls access to all GUI functions */
|
||||
|
||||
//--------------------------------------------------------------------
|
||||
// common GUI thread code
|
||||
@@ -182,7 +182,7 @@ void *wxThreadInternal::PthreadStart(void *ptr)
|
||||
{
|
||||
wxThread *thread = (wxThread *)ptr;
|
||||
|
||||
// Call the main entry
|
||||
/* Call the main entry */
|
||||
pthread_setcanceltype(PTHREAD_CANCEL_ASYNCHRONOUS, NULL);
|
||||
void* status = thread->Entry();
|
||||
|
||||
@@ -200,7 +200,7 @@ wxThreadError wxThread::Create()
|
||||
if (p_internal->state != STATE_IDLE)
|
||||
return wxTHREAD_RUNNING;
|
||||
|
||||
// Change thread priority
|
||||
/* Change thread priority */
|
||||
pthread_attr_init(&a);
|
||||
pthread_attr_getschedpolicy(&a, &p);
|
||||
|
||||
@@ -365,7 +365,7 @@ wxThread::~wxThread()
|
||||
delete p_internal;
|
||||
}
|
||||
|
||||
// The default callback just joins the thread and throws away the result.
|
||||
/* The default callback just joins the thread and throws away the result. */
|
||||
void wxThread::OnExit()
|
||||
{
|
||||
Join();
|
||||
@@ -375,28 +375,22 @@ void wxThread::OnExit()
|
||||
// wxThreadModule
|
||||
//--------------------------------------------------------------------
|
||||
|
||||
class wxThreadModule : public wxModule
|
||||
{
|
||||
DECLARE_DYNAMIC_CLASS(wxThreadModule)
|
||||
|
||||
public:
|
||||
virtual bool OnInit()
|
||||
{
|
||||
wxMainMutex = new wxMutex();
|
||||
wxThreadGuiInit();
|
||||
p_mainid = pthread_self();
|
||||
wxMainMutex->Lock();
|
||||
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
virtual void OnExit()
|
||||
{
|
||||
wxMainMutex->Unlock();
|
||||
wxThreadGuiExit();
|
||||
delete wxMainMutex;
|
||||
}
|
||||
};
|
||||
|
||||
IMPLEMENT_DYNAMIC_CLASS(wxThreadModule, wxModule)
|
||||
|
||||
bool wxThreadModule::OnInit()
|
||||
{
|
||||
wxMainMutex = new wxMutex();
|
||||
wxThreadGuiInit();
|
||||
p_mainid = (int)getpid();
|
||||
wxMainMutex->Lock();
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
void wxThreadModule::OnExit()
|
||||
{
|
||||
wxMainMutex->Unlock();
|
||||
wxThreadGuiExit();
|
||||
delete wxMainMutex;
|
||||
}
|
||||
|
||||
|
||||
|
@@ -238,21 +238,22 @@ void wxThread::OnExit()
|
||||
}
|
||||
|
||||
// Global initialization
|
||||
class wxThreadModule : public wxModule {
|
||||
DECLARE_DYNAMIC_CLASS(wxThreadModule)
|
||||
public:
|
||||
virtual bool OnInit() {
|
||||
|
||||
IMPLEMENT_DYNAMIC_CLASS(wxThreadModule, wxModule)
|
||||
|
||||
bool wxThreadModule::OnInit()
|
||||
{
|
||||
wxMainMutex = new wxMutex();
|
||||
wxThreadGuiInit();
|
||||
p_mainid = (int)getpid();
|
||||
wxMainMutex->Lock();
|
||||
}
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
virtual void OnExit() {
|
||||
void wxThreadModule::OnExit()
|
||||
{
|
||||
wxMainMutex->Unlock();
|
||||
wxThreadGuiExit();
|
||||
delete wxMainMutex;
|
||||
}
|
||||
};
|
||||
}
|
||||
|
||||
IMPLEMENT_DYNAMIC_CLASS(wxThreadModule, wxModule)
|
||||
|
@@ -191,21 +191,21 @@ void wxApp::OnIdle( wxIdleEvent &event )
|
||||
{
|
||||
static bool inOnIdle = FALSE;
|
||||
|
||||
// Avoid recursion (via ProcessEvent default case)
|
||||
/* Avoid recursion (via ProcessEvent default case) */
|
||||
if (inOnIdle)
|
||||
return;
|
||||
|
||||
inOnIdle = TRUE;
|
||||
|
||||
// 'Garbage' collection of windows deleted with Close().
|
||||
/* 'Garbage' collection of windows deleted with Close(). */
|
||||
DeletePendingObjects();
|
||||
|
||||
// flush the logged messages if any
|
||||
wxLog *pLog = wxLog::GetActiveTarget();
|
||||
if (pLog != NULL && pLog->HasPendingMessages())
|
||||
pLog->Flush();
|
||||
/* flush the logged messages if any */
|
||||
wxLog *log = wxLog::GetActiveTarget();
|
||||
if (log != NULL && log->HasPendingMessages())
|
||||
log->Flush();
|
||||
|
||||
// Send OnIdle events to all windows
|
||||
/* Send OnIdle events to all windows */
|
||||
bool needMore = SendIdleEvents();
|
||||
|
||||
if (needMore)
|
||||
@@ -372,14 +372,6 @@ int wxEntry( int argc, char *argv[] )
|
||||
|
||||
wxClassInfo::InitializeClasses();
|
||||
|
||||
/* Debug stream no longer used
|
||||
#if (defined(__WXDEBUG__) && wxUSE_MEMORY_TRACING) || wxUSE_DEBUG_CONTEXT
|
||||
|
||||
streambuf* sBuf = new wxDebugStreamBuf;
|
||||
ostream* oStr = new ostream(sBuf) ;
|
||||
wxDebugContext::SetStream(oStr, sBuf);
|
||||
#endif
|
||||
*/
|
||||
|
||||
if (!wxTheApp)
|
||||
{
|
||||
@@ -474,7 +466,6 @@ int wxEntry( int argc, char *argv[] )
|
||||
wxDebugContext::Dump();
|
||||
wxDebugContext::PrintStatistics();
|
||||
}
|
||||
// wxDebugContext::SetStream(NULL, NULL);
|
||||
|
||||
#endif
|
||||
|
||||
|
@@ -160,15 +160,10 @@ void wxThread::OnExit()
|
||||
}
|
||||
|
||||
|
||||
// Automatic initialization
|
||||
class wxThreadModule : public wxModule {
|
||||
DECLARE_DYNAMIC_CLASS(wxThreadModule)
|
||||
public:
|
||||
bool OnInit();
|
||||
void OnExit();
|
||||
};
|
||||
IMPLEMENT_DYNAMIC_CLASS(wxThreadModule, wxModule)
|
||||
|
||||
bool wxThreadModule::OnInit() {
|
||||
bool wxThreadModule::OnInit()
|
||||
{
|
||||
wxMainMutex = new wxMutex();
|
||||
wxMainMutex->Lock();
|
||||
return TRUE;
|
||||
@@ -180,7 +175,7 @@ void wxThreadModule::OnExit()
|
||||
delete wxMainMutex;
|
||||
}
|
||||
|
||||
IMPLEMENT_DYNAMIC_CLASS(wxThreadModule, wxModule)
|
||||
|
||||
|
||||
void wxMutexGuiEnter()
|
||||
{
|
||||
|
@@ -43,7 +43,7 @@ enum thread_state
|
||||
|
||||
static pthread_t p_mainid;
|
||||
|
||||
wxMutex *wxMainMutex; // controls access to all GUI functions
|
||||
wxMutex *wxMainMutex; /* controls access to all GUI functions */
|
||||
|
||||
//--------------------------------------------------------------------
|
||||
// common GUI thread code
|
||||
@@ -182,7 +182,7 @@ void *wxThreadInternal::PthreadStart(void *ptr)
|
||||
{
|
||||
wxThread *thread = (wxThread *)ptr;
|
||||
|
||||
// Call the main entry
|
||||
/* Call the main entry */
|
||||
pthread_setcanceltype(PTHREAD_CANCEL_ASYNCHRONOUS, NULL);
|
||||
void* status = thread->Entry();
|
||||
|
||||
@@ -200,7 +200,7 @@ wxThreadError wxThread::Create()
|
||||
if (p_internal->state != STATE_IDLE)
|
||||
return wxTHREAD_RUNNING;
|
||||
|
||||
// Change thread priority
|
||||
/* Change thread priority */
|
||||
pthread_attr_init(&a);
|
||||
pthread_attr_getschedpolicy(&a, &p);
|
||||
|
||||
@@ -365,7 +365,7 @@ wxThread::~wxThread()
|
||||
delete p_internal;
|
||||
}
|
||||
|
||||
// The default callback just joins the thread and throws away the result.
|
||||
/* The default callback just joins the thread and throws away the result. */
|
||||
void wxThread::OnExit()
|
||||
{
|
||||
Join();
|
||||
@@ -375,28 +375,22 @@ void wxThread::OnExit()
|
||||
// wxThreadModule
|
||||
//--------------------------------------------------------------------
|
||||
|
||||
class wxThreadModule : public wxModule
|
||||
{
|
||||
DECLARE_DYNAMIC_CLASS(wxThreadModule)
|
||||
|
||||
public:
|
||||
virtual bool OnInit()
|
||||
{
|
||||
wxMainMutex = new wxMutex();
|
||||
wxThreadGuiInit();
|
||||
p_mainid = pthread_self();
|
||||
wxMainMutex->Lock();
|
||||
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
virtual void OnExit()
|
||||
{
|
||||
wxMainMutex->Unlock();
|
||||
wxThreadGuiExit();
|
||||
delete wxMainMutex;
|
||||
}
|
||||
};
|
||||
|
||||
IMPLEMENT_DYNAMIC_CLASS(wxThreadModule, wxModule)
|
||||
|
||||
bool wxThreadModule::OnInit()
|
||||
{
|
||||
wxMainMutex = new wxMutex();
|
||||
wxThreadGuiInit();
|
||||
p_mainid = (int)getpid();
|
||||
wxMainMutex->Lock();
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
void wxThreadModule::OnExit()
|
||||
{
|
||||
wxMainMutex->Unlock();
|
||||
wxThreadGuiExit();
|
||||
delete wxMainMutex;
|
||||
}
|
||||
|
||||
|
||||
|
@@ -238,21 +238,22 @@ void wxThread::OnExit()
|
||||
}
|
||||
|
||||
// Global initialization
|
||||
class wxThreadModule : public wxModule {
|
||||
DECLARE_DYNAMIC_CLASS(wxThreadModule)
|
||||
public:
|
||||
virtual bool OnInit() {
|
||||
|
||||
IMPLEMENT_DYNAMIC_CLASS(wxThreadModule, wxModule)
|
||||
|
||||
bool wxThreadModule::OnInit()
|
||||
{
|
||||
wxMainMutex = new wxMutex();
|
||||
wxThreadGuiInit();
|
||||
p_mainid = (int)getpid();
|
||||
wxMainMutex->Lock();
|
||||
}
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
virtual void OnExit() {
|
||||
void wxThreadModule::OnExit()
|
||||
{
|
||||
wxMainMutex->Unlock();
|
||||
wxThreadGuiExit();
|
||||
delete wxMainMutex;
|
||||
}
|
||||
};
|
||||
}
|
||||
|
||||
IMPLEMENT_DYNAMIC_CLASS(wxThreadModule, wxModule)
|
||||
|
@@ -414,30 +414,24 @@ void wxThread::OnExit()
|
||||
// wxThreadModule
|
||||
//--------------------------------------------------------------------
|
||||
|
||||
class wxThreadModule : public wxModule
|
||||
{
|
||||
DECLARE_DYNAMIC_CLASS(wxThreadModule)
|
||||
|
||||
public:
|
||||
virtual bool OnInit()
|
||||
{
|
||||
wxMainMutex = new wxMutex();
|
||||
wxThreadGuiInit();
|
||||
p_mainid = pthread_self();
|
||||
wxMainMutex->Lock();
|
||||
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
virtual void OnExit()
|
||||
{
|
||||
wxMainMutex->Unlock();
|
||||
wxThreadGuiExit();
|
||||
delete wxMainMutex;
|
||||
}
|
||||
};
|
||||
|
||||
IMPLEMENT_DYNAMIC_CLASS(wxThreadModule, wxModule)
|
||||
|
||||
bool wxThreadModule::OnInit()
|
||||
{
|
||||
wxMainMutex = new wxMutex();
|
||||
wxThreadGuiInit();
|
||||
p_mainid = pthread_self();
|
||||
wxMainMutex->Lock();
|
||||
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
void wxThreadModule::OnExit()
|
||||
{
|
||||
wxMainMutex->Unlock();
|
||||
wxThreadGuiExit();
|
||||
delete wxMainMutex;
|
||||
};
|
||||
|
||||
#endif
|
||||
// wxUSE_THREADS
|
||||
|
@@ -366,25 +366,7 @@ void wxThread::OnExit()
|
||||
Join();
|
||||
}
|
||||
|
||||
// Automatic initialization
|
||||
class wxThreadModule : public wxModule {
|
||||
DECLARE_DYNAMIC_CLASS(wxThreadModule)
|
||||
public:
|
||||
virtual bool OnInit() {
|
||||
wxMainMutex = new wxMutex();
|
||||
p_mainid = GetCurrentThread();
|
||||
wxMainMutex->Lock();
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
// Global cleanup
|
||||
virtual void OnExit() {
|
||||
wxMainMutex->Unlock();
|
||||
delete wxMainMutex;
|
||||
}
|
||||
};
|
||||
|
||||
IMPLEMENT_DYNAMIC_CLASS(wxThreadModule, wxModule)
|
||||
// GUI mutex functions
|
||||
|
||||
void WXDLLEXPORT wxMutexGuiEnter()
|
||||
{
|
||||
@@ -395,3 +377,22 @@ void WXDLLEXPORT wxMutexGuiLeave()
|
||||
{
|
||||
wxFAIL_MSG("not implemented");
|
||||
}
|
||||
|
||||
// Automatic initialization
|
||||
|
||||
IMPLEMENT_DYNAMIC_CLASS(wxThreadModule, wxModule)
|
||||
|
||||
bool wxThreadModule::OnInit()
|
||||
{
|
||||
wxMainMutex = new wxMutex();
|
||||
p_mainid = GetCurrentThread();
|
||||
wxMainMutex->Lock();
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
void wxThreadModule::OnExit()
|
||||
{
|
||||
wxMainMutex->Unlock();
|
||||
delete wxMainMutex;
|
||||
};
|
||||
|
||||
|
Reference in New Issue
Block a user