#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
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
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();
// ----------------------------------------------------------------------------
// Condition handler.
// ----------------------------------------------------------------------------
+
class wxConditionInternal;
-class WXDLLEXPORT wxCondition {
+class WXDLLEXPORT wxCondition
+{
public:
// constructor & destructor
wxCondition();
// ----------------------------------------------------------------------------
// Thread management class
// ----------------------------------------------------------------------------
+
class wxThreadInternal;
-class WXDLLEXPORT wxThread {
+class WXDLLEXPORT wxThread
+{
public:
// constructor & destructor.
wxThread();
};
// ----------------------------------------------------------------------------
-// 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__
// 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))
#define __MINMAX_DEFINED 1
#endif
*/
+
#define wxMax(a,b) (((a) > (b)) ? (a) : (b))
#define wxMin(a,b) (((a) < (b)) ? (a) : (b))
test.o
# additional things needed to link
-BIN_LINK= $(THREADS_LINK)
+BIN_LINK=
# additional things needed to compile
ADD_COMPILE=
$(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)
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:
{
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)
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)
{
wxDebugContext::Dump();
wxDebugContext::PrintStatistics();
}
-// wxDebugContext::SetStream(NULL, NULL);
#endif
}
-// 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;
delete wxMainMutex;
}
-IMPLEMENT_DYNAMIC_CLASS(wxThreadModule, wxModule)
+
void wxMutexGuiEnter()
{
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
{
wxThread *thread = (wxThread *)ptr;
- // Call the main entry
+ /* Call the main entry */
pthread_setcanceltype(PTHREAD_CANCEL_ASYNCHRONOUS, NULL);
void* status = thread->Entry();
if (p_internal->state != STATE_IDLE)
return wxTHREAD_RUNNING;
- // Change thread priority
+ /* Change thread priority */
pthread_attr_init(&a);
pthread_attr_getschedpolicy(&a, &p);
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();
// wxThreadModule
//--------------------------------------------------------------------
-class wxThreadModule : public wxModule
-{
- DECLARE_DYNAMIC_CLASS(wxThreadModule)
-
-public:
- virtual bool OnInit()
- {
- wxMainMutex = new wxMutex();
- wxThreadGuiInit();
- p_mainid = pthread_self();
- wxMainMutex->Lock();
+IMPLEMENT_DYNAMIC_CLASS(wxThreadModule, wxModule)
- return TRUE;
- }
+bool wxThreadModule::OnInit()
+{
+ wxMainMutex = new wxMutex();
+ wxThreadGuiInit();
+ p_mainid = (int)getpid();
+ wxMainMutex->Lock();
+ return TRUE;
+}
- virtual void OnExit()
- {
- wxMainMutex->Unlock();
- wxThreadGuiExit();
- delete wxMainMutex;
- }
-};
+void wxThreadModule::OnExit()
+{
+ wxMainMutex->Unlock();
+ wxThreadGuiExit();
+ delete wxMainMutex;
+}
-IMPLEMENT_DYNAMIC_CLASS(wxThreadModule, wxModule)
}
// 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)
{
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)
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)
{
wxDebugContext::Dump();
wxDebugContext::PrintStatistics();
}
-// wxDebugContext::SetStream(NULL, NULL);
#endif
}
-// 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;
delete wxMainMutex;
}
-IMPLEMENT_DYNAMIC_CLASS(wxThreadModule, wxModule)
+
void wxMutexGuiEnter()
{
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
{
wxThread *thread = (wxThread *)ptr;
- // Call the main entry
+ /* Call the main entry */
pthread_setcanceltype(PTHREAD_CANCEL_ASYNCHRONOUS, NULL);
void* status = thread->Entry();
if (p_internal->state != STATE_IDLE)
return wxTHREAD_RUNNING;
- // Change thread priority
+ /* Change thread priority */
pthread_attr_init(&a);
pthread_attr_getschedpolicy(&a, &p);
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();
// wxThreadModule
//--------------------------------------------------------------------
-class wxThreadModule : public wxModule
-{
- DECLARE_DYNAMIC_CLASS(wxThreadModule)
-
-public:
- virtual bool OnInit()
- {
- wxMainMutex = new wxMutex();
- wxThreadGuiInit();
- p_mainid = pthread_self();
- wxMainMutex->Lock();
+IMPLEMENT_DYNAMIC_CLASS(wxThreadModule, wxModule)
- return TRUE;
- }
+bool wxThreadModule::OnInit()
+{
+ wxMainMutex = new wxMutex();
+ wxThreadGuiInit();
+ p_mainid = (int)getpid();
+ wxMainMutex->Lock();
+ return TRUE;
+}
- virtual void OnExit()
- {
- wxMainMutex->Unlock();
- wxThreadGuiExit();
- delete wxMainMutex;
- }
-};
+void wxThreadModule::OnExit()
+{
+ wxMainMutex->Unlock();
+ wxThreadGuiExit();
+ delete wxMainMutex;
+}
-IMPLEMENT_DYNAMIC_CLASS(wxThreadModule, wxModule)
}
// 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)
// wxThreadModule
//--------------------------------------------------------------------
-class wxThreadModule : public wxModule
+IMPLEMENT_DYNAMIC_CLASS(wxThreadModule, wxModule)
+
+bool wxThreadModule::OnInit()
{
- DECLARE_DYNAMIC_CLASS(wxThreadModule)
-
-public:
- virtual bool OnInit()
- {
- wxMainMutex = new wxMutex();
- wxThreadGuiInit();
- p_mainid = pthread_self();
- wxMainMutex->Lock();
+ wxMainMutex = new wxMutex();
+ wxThreadGuiInit();
+ p_mainid = pthread_self();
+ wxMainMutex->Lock();
- return TRUE;
- }
+ return TRUE;
+}
- virtual void OnExit()
- {
- wxMainMutex->Unlock();
- wxThreadGuiExit();
- delete wxMainMutex;
- }
+void wxThreadModule::OnExit()
+{
+ wxMainMutex->Unlock();
+ wxThreadGuiExit();
+ delete wxMainMutex;
};
-IMPLEMENT_DYNAMIC_CLASS(wxThreadModule, wxModule)
-
#endif
// wxUSE_THREADS
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()
{
{
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;
+};
+