]> git.saurik.com Git - wxWidgets.git/blobdiff - src/gtk1/threadno.cpp
reduce black background flicker a bit - there is still some left sometimes initially...
[wxWidgets.git] / src / gtk1 / threadno.cpp
index deccf57775bc06b0cae7b67ccaa1ecd1a18b172a..c31f6c8454a05d8c754d93a3b28903f292aa55c2 100644 (file)
@@ -1,51 +1,57 @@
 /////////////////////////////////////////////////////////////////////////////
 // Name:        thread.cpp
-// Purpose:     No thread support
-// Author:      Original from Wolfram Gloger/Guilhem Lavaux
+// Purpose:     Solaris thread support
+// Author:      Guilhem Lavaux
 // Modified by:
 // Created:     04/22/98
 // RCS-ID:      $Id$
 // Copyright:   (c) Wolfram Gloger (1996, 1997); Guilhem Lavaux (1998)
 // Licence:     wxWindows licence
 /////////////////////////////////////////////////////////////////////////////
-#ifdef __GNUG__
-#pragma implementation "thread.h"
+
+#if defined(__GNUG__) && !defined(NO_GCC_PRAGMA)
+    #pragma implementation "thread.h"
 #endif
 
-#include "wx/wx.h"
+// For compilers that support precompilation, includes "wx.h".
+#include "wx/wxprec.h"
+
 #include "wx/thread.h"
+#include "wx/wx.h"
+#include "wx/module.h"
+#include "wx/log.h"
 
 wxMutex::wxMutex()
 {
-  m_locked = 0;
+    m_locked = 0;
 }
 
 wxMutex::~wxMutex()
 {
-  if (m_locked)
-    wxDebugMsg("wxMutex warning: destroying a locked mutex (%d locks)\n", m_locked);
+    if (m_locked)
+        wxLogDebug( "wxMutex warning: destroying a locked mutex (%d locks)", m_locked );
 }
 
-MutexError wxMutex::Lock()
+wxMutexError wxMutex::Lock()
 {
-  m_locked++;
-  return MUTEX_NO_ERROR;
+    m_locked++;
+    return wxMUTEX_NO_ERROR;
 }
 
-MutexError wxMutex::TryLock()
+wxMutexError wxMutex::TryLock()
 {
-  if (m_locked > 0)
-    return MUTEX_BUSY;
-  m_locked++;
-  return MUTEX_NO_ERROR;
+    if (m_locked > 0)
+        return wxMUTEX_BUSY;
+    m_locked++;
+    return wxMUTEX_NO_ERROR;
 }
 
-MutexError wxMutex::Unlock()
+wxMutexError wxMutex::Unlock()
 {
-  if (m_locked == 0)
-    return MUTEX_UNLOCKED;
-  m_locked--;
-  return MUTEX_NO_ERROR;
+    if (m_locked == 0)
+        return wxMUTEX_UNLOCKED;
+    m_locked--;
+    return wxMUTEX_NO_ERROR;
 }
 
 wxCondition::wxCondition()
@@ -61,9 +67,9 @@ void wxCondition::Wait(wxMutex& WXUNUSED(mutex))
 }
 
 bool wxCondition::Wait(wxMutex& WXUNUSED(mutex), unsigned long WXUNUSED(sec),
-                      unsigned long WXUNUSED(nsec))
+        unsigned long WXUNUSED(nsec))
 {
-  return FALSE;
+    return FALSE;
 }
 
 void wxCondition::Signal()
@@ -74,24 +80,35 @@ void wxCondition::Broadcast()
 {
 }
 
-struct wxThreadPrivate {
-       int thread_id;
-       void* exit_status;
+struct wxThreadInternal
+{
+    int thread_id;
+    void* exit_status;
 };
 
-ThreadError wxThread::Create()
+wxThreadError wxThread::Create()
+{
+    p_internal->exit_status = Entry();
+    OnExit();
+    return wxTHREAD_NO_ERROR;
+}
+
+wxThreadError wxThread::Destroy()
+{
+    return wxTHREAD_NOT_RUNNING;
+}
+
+wxThreadError wxThread::Pause()
 {
-  p_internal->exit_status = Entry();
-  OnExit();
-  return THREAD_NO_ERROR;
+    return wxTHREAD_NOT_RUNNING;
 }
 
-ThreadError wxThread::Destroy()
+wxThreadError wxThread::Resume()
 {
-  return THREAD_RUNNING;
+    return wxTHREAD_NOT_RUNNING;
 }
 
-void wxThread::DeferDestroy()
+void wxThread::DeferDestroy( bool WXUNUSED(on) )
 {
 }
 
@@ -101,64 +118,73 @@ void wxThread::TestDestroy()
 
 void *wxThread::Join()
 {
-  return p_internal->exit_status;
+    return p_internal->exit_status;
 }
 
 unsigned long wxThread::GetID() const
 {
-  return 0;
+    return 0;
 }
 
 bool wxThread::IsMain()
 {
-  return TRUE;
+    return TRUE;
+}
+
+bool wxThread::IsRunning() const
+{
+    return FALSE;
 }
 
 bool wxThread::IsAlive() const
 {
-  return FALSE;
+    return FALSE;
 }
 
 void wxThread::SetPriority(int WXUNUSED(prio)) { }
-int wxThread::GetPriority() const { }
+int wxThread::GetPriority() const { return 0; }
 
-wxMutex wxMainMutex; // controls access to all GUI functions
+wxMutex *wxMainMutex; // controls access to all GUI functions
 
 wxThread::wxThread()
 {
-  p_internal = new wxThreadPrivate();
+    p_internal = new wxThreadInternal();
 }
 
 wxThread::~wxThread()
 {
-  Cancel();
-  Join();
-  delete p_internal;
+    Destroy();
+    Join();
+    delete p_internal;
 }
 
 // The default callback just joins the thread and throws away the result.
 void wxThread::OnExit()
 {
-  Join();
+    Join();
 }
 
+IMPLEMENT_DYNAMIC_CLASS(wxThreadModule, wxModule)
 
-// Automatic initialization
-class wxThreadModule : public wxModule {
-  DECLARE_DYNAMIC_CLASS(wxThreadModule)
-public:
-  bool OnInit();
-  void OnExit();
-};
+bool wxThreadModule::OnInit()
+{
+    wxMainMutex = new wxMutex();
+    wxMainMutex->Lock();
+    return TRUE;
+}
 
-bool wxThreadModule::OnInit() {
-  wxMainMutex.Lock();
-  return TRUE;
+void wxThreadModule::OnExit()
+{
+    wxMainMutex->Unlock();
+    delete wxMainMutex;
 }
 
-void wxThreadModule::wxThreadExit()
+
+
+void wxMutexGuiEnter()
 {
-  wxMainMutex.Unlock();
 }
 
-IMPLEMENT_DYNAMIC_CLASS(wxThreadModule, wxModule)
+void wxMutexGuiLeave()
+{
+}