+// ----------------------------------------------------------------------------
+// wxCriticalSection implementation
+// ----------------------------------------------------------------------------
+
+class wxCriticalSectionInternal
+{
+public:
+ // init the critical section object
+ wxCriticalSectionInternal()
+ { ::InitializeCriticalSection(&m_data); }
+
+ // implicit cast to the associated data
+ operator CRITICAL_SECTION *() { return &m_data; }
+
+ // free the associated ressources
+ ~wxCriticalSectionInternal()
+ { ::DeleteCriticalSection(&m_data); }
+
+private:
+ CRITICAL_SECTION m_data;
+};
+
+wxCriticalSection::wxCriticalSection()
+{
+ m_critsect = new wxCriticalSectionInternal;
+}
+
+wxCriticalSection::~wxCriticalSection()
+{
+ delete m_critsect;
+}
+
+void wxCriticalSection::Enter()
+{
+ ::EnterCriticalSection(*m_critsect);
+}
+
+void wxCriticalSection::Leave()
+{
+ ::LeaveCriticalSection(*m_critsect);
+}
+
+// ----------------------------------------------------------------------------
+// wxThread implementation
+// ----------------------------------------------------------------------------
+
+class wxThreadInternal
+{