From acd9676ebb6a4ab1837a7f818ff1a6b0c9cb9c32 Mon Sep 17 00:00:00 2001 From: Stefan Csomor Date: Mon, 14 Aug 2000 08:15:51 +0000 Subject: [PATCH] thread support for mac finished git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@8084 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775 --- include/wx/mac/setup.h | 6 +++--- include/wx/thread.h | 13 ++++++++++--- include/wx_cw.pch | 5 +++++ include/wx_cw.pch++ | 1 + include/wx_cw_d.pch | 1 + include/wx_cw_d.pch++ | 3 +-- samples/thread/makemac.mcp | Bin 0 -> 153579 bytes 7 files changed, 21 insertions(+), 8 deletions(-) create mode 100644 samples/thread/makemac.mcp diff --git a/include/wx/mac/setup.h b/include/wx/mac/setup.h index bdbcba2aff..3469bdc814 100644 --- a/include/wx/mac/setup.h +++ b/include/wx/mac/setup.h @@ -1,8 +1,8 @@ ///////////////////////////////////////////////////////////////////////////// // Name: setup.h // Purpose: Configuration for the library -// Author: AUTHOR -// Modified by: +// Author: Stefan Csomor +// Modified by: Stefan Csomor // Created: ??/??/98 // RCS-ID: $Id$ // Copyright: (c) AUTHOR @@ -199,7 +199,7 @@ // if enabled, compiles built-in OS independent wxConfig // class and it's file (any platform) and registry (Win) // based implementations -#define wxUSE_THREADS 0 +#define wxUSE_THREADS 1 // support for multithreaded applications: if // 1, compile in thread classes (thread.h) // and make the library thread safe diff --git a/include/wx/thread.h b/include/wx/thread.h index a4c4b465df..d4af63db35 100644 --- a/include/wx/thread.h +++ b/include/wx/thread.h @@ -150,11 +150,11 @@ class WXDLLEXPORT wxCriticalSectionInternal; // in order to avoid any overhead under platforms where critical sections are // just mutexes make all wxCriticalSection class functions inline -#if !defined(__WXMSW__) && !defined(__WXPM__) && !defined(__WXMAC__) +#if !defined(__WXMSW__) && !defined(__WXPM__) #define WXCRITICAL_INLINE inline #define wxCRITSECT_IS_MUTEX 1 -#else // MSW || Mac || OS2 +#else // MSW || OS2 #define WXCRITICAL_INLINE #define wxCRITSECT_IS_MUTEX 0 @@ -471,7 +471,7 @@ public: // wxApp then should block all "dangerous" messages extern bool WXDLLEXPORT wxIsWaitingForThread(); #elif defined(__WXMAC__) - extern void WXDLLEXPORT wxMutexGuiLeaveOrEnter(); + extern void WXDLLEXPORT wxMutexGuiLeaveOrEnter(); // returns TRUE if the main thread has GUI lock extern bool WXDLLEXPORT wxGuiOwnedByMainThread(); @@ -482,6 +482,13 @@ public: // return TRUE if the main thread is waiting for some other to terminate: // wxApp then should block all "dangerous" messages extern bool WXDLLEXPORT wxIsWaitingForThread(); + + // implement wxCriticalSection using mutexes + inline wxCriticalSection::wxCriticalSection() { } + inline wxCriticalSection::~wxCriticalSection() { } + + inline void wxCriticalSection::Enter() { (void)m_mutex.Lock(); } + inline void wxCriticalSection::Leave() { (void)m_mutex.Unlock(); } #elif defined(__WXPM__) // unlock GUI if there are threads waiting for and lock it back when // there are no more of them - should be called periodically by the main diff --git a/include/wx_cw.pch b/include/wx_cw.pch index 8a5a49d142..2544b89085 100644 --- a/include/wx_cw.pch +++ b/include/wx_cw.pch @@ -23,4 +23,9 @@ #pragma once on #undef WX_PRECOMP #define wxUSE_GUI 1 +#define OLDP2C 1 #include "wx/wx_cw_cm.h" +#ifdef __WXMSW__ + #include + #include "wx/msw/winundef.h" +#endif diff --git a/include/wx_cw.pch++ b/include/wx_cw.pch++ index a9f6924473..7228505285 100644 --- a/include/wx_cw.pch++ +++ b/include/wx_cw.pch++ @@ -23,5 +23,6 @@ #pragma once on #define WX_PRECOMP #define wxUSE_GUI 1 +#define OLDP2C 1 #include "wx/wx_cw_cm.h" #include "wx/wxprec.h" \ No newline at end of file diff --git a/include/wx_cw_d.pch b/include/wx_cw_d.pch index a38cd139e5..9aa65032de 100644 --- a/include/wx_cw_d.pch +++ b/include/wx_cw_d.pch @@ -18,6 +18,7 @@ #undef WX_PRECOMP #define __WXDEBUG__ 1 #define wxUSE_GUI 1 +#define OLDP2C 1 #include "wx/wx_cw_cm.h" #ifdef __WXMSW__ #include diff --git a/include/wx_cw_d.pch++ b/include/wx_cw_d.pch++ index cb5643a468..20164b5ab3 100644 --- a/include/wx_cw_d.pch++ +++ b/include/wx_cw_d.pch++ @@ -16,8 +16,7 @@ #define WX_PRECOMP #define __WXDEBUG__ 1 #define wxUSE_GUI 1 - - +#define OLDP2C 1 #include "wx/wx_cw_cm.h" #ifdef WX_PRECOMP #include "wx/wxprec.h" diff --git a/samples/thread/makemac.mcp b/samples/thread/makemac.mcp new file mode 100644 index 0000000000000000000000000000000000000000..12218f1b044299e86e5ff3160495144a3fe52822 GIT binary patch literal 153579 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 gIw4jkyoy@RNAZ1L{(d-T(jq literal 0 HcmV?d00001