]> git.saurik.com Git - wxWidgets.git/blobdiff - src/unix/threadpsx.cpp
Added various #includes for non-precompiled headers.
[wxWidgets.git] / src / unix / threadpsx.cpp
index fd9b12c7313d37038187ffddb9ff6db8db336e59..e10fe97e82d98353f1d127f6e71afc17424e06d8 100644 (file)
@@ -490,12 +490,18 @@ void wxCondition::Broadcast()
 // wxThread (Posix implementation)
 //--------------------------------------------------------------------
 
+// the thread callback functions must have the C linkage
+extern "C"
+{
+
 #if HAVE_THREAD_CLEANUP_FUNCTIONS
+    // thread exit function
+    void wxPthreadCleanup(void *ptr);
+#endif // HAVE_THREAD_CLEANUP_FUNCTIONS
 
-// thread exit function
-extern "C" void wxPthreadCleanup(void *ptr);
+void *wxPthreadStart(void *ptr);
 
-#endif // HAVE_THREAD_CLEANUP_FUNCTIONS
+} // extern "C"
 
 class wxThreadInternal
 {
@@ -504,7 +510,7 @@ public:
     ~wxThreadInternal();
 
     // thread entry function
-    static void *PthreadStart(void *ptr);
+    static void *PthreadStart(wxThread *thread);
 
     // thread actions
         // start the thread
@@ -600,9 +606,13 @@ private:
 // thread startup and exit functions
 // ----------------------------------------------------------------------------
 
-void *wxThreadInternal::PthreadStart(void *ptr)
+void *wxPthreadStart(void *ptr)
+{
+    return wxThreadInternal::PthreadStart((wxThread *)ptr);
+}
+
+void *wxThreadInternal::PthreadStart(wxThread *thread)
 {
-    wxThread *thread = (wxThread *)ptr;
     wxThreadInternal *pthread = thread->m_internal;
 
     // associate the thread pointer with the newly created thread so that
@@ -622,7 +632,7 @@ void *wxThreadInternal::PthreadStart(void *ptr)
 #if HAVE_THREAD_CLEANUP_FUNCTIONS
     // install the cleanup handler which will be called if the thread is
     // cancelled
-    pthread_cleanup_push(wxPthreadCleanup, ptr);
+    pthread_cleanup_push(wxPthreadCleanup, thread);
 #endif // HAVE_THREAD_CLEANUP_FUNCTIONS
 
     // wait for the condition to be signaled from Run()
@@ -918,6 +928,19 @@ int wxThread::GetCPUCount()
     return -1;
 }
 
+#ifdef __VMS
+  // VMS is a 64 bit system and threads have 64 bit pointers.
+  // ??? also needed for other systems????
+unsigned long long wxThread::GetCurrentId()
+{
+    return (unsigned long long)pthread_self();
+#else
+unsigned long wxThread::GetCurrentId()
+{
+    return (unsigned long)pthread_self();
+#endif
+}
+
 bool wxThread::SetConcurrency(size_t level)
 {
 #ifdef HAVE_THR_SETCONCURRENCY
@@ -976,7 +999,7 @@ wxThreadError wxThread::Create(unsigned int WXUNUSED(stackSize))
 #define sched_get_priority_min(_pol_) \
      (_pol_ == SCHED_OTHER ? PRI_FG_MIN_NP : PRI_FIFO_MIN)
 #endif
-   
+
     int max_prio = sched_get_priority_max(policy),
         min_prio = sched_get_priority_min(policy),
         prio = m_internal->GetPriority();
@@ -1042,7 +1065,7 @@ wxThreadError wxThread::Create(unsigned int WXUNUSED(stackSize))
              (
                 m_internal->GetIdPtr(),
                 &attr,
-                wxThreadInternal::PthreadStart,
+                wxPthreadStart,
                 (void *)this
              );