Jelajahi Sumber

BThreadWork: add BThreadWorkDispatcher_UsingThreads

ambrop7 15 tahun lalu
induk
melakukan
9de80f62cd
2 mengubah file dengan 20 tambahan dan 3 penghapusan
  1. 11 2
      threadwork/BThreadWork.c
  2. 9 1
      threadwork/BThreadWork.h

+ 11 - 2
threadwork/BThreadWork.c

@@ -149,7 +149,9 @@ static void more_job_handler (BThreadWorkDispatcher *o)
 
 
 static void work_job_handler (BThreadWork *o)
 static void work_job_handler (BThreadWork *o)
 {
 {
+    #ifdef BADVPN_THREADWORK_USE_PTHREAD
     ASSERT(o->d->num_threads == 0)
     ASSERT(o->d->num_threads == 0)
+    #endif
     DebugObject_Access(&o->d_obj);
     DebugObject_Access(&o->d_obj);
     
     
     // do the work
     // do the work
@@ -172,8 +174,6 @@ int BThreadWorkDispatcher_Init (BThreadWorkDispatcher *o, BReactor *reactor, int
     } else {
     } else {
         o->num_threads = num_threads_hint;
         o->num_threads = num_threads_hint;
     }
     }
-    #else
-    o->num_threads = 0;
     #endif
     #endif
     
     
     #ifdef BADVPN_THREADWORK_USE_PTHREAD
     #ifdef BADVPN_THREADWORK_USE_PTHREAD
@@ -305,6 +305,15 @@ void BThreadWorkDispatcher_Free (BThreadWorkDispatcher *o)
     #endif
     #endif
 }
 }
 
 
+int BThreadWorkDispatcher_UsingThreads (BThreadWorkDispatcher *o)
+{
+    #ifdef BADVPN_THREADWORK_USE_PTHREAD
+    return (o->num_threads > 0);
+    #else
+    return 0;
+    #endif
+}
+
 void BThreadWork_Init (BThreadWork *o, BThreadWorkDispatcher *d, BThreadWork_handler_done handler_done, void *user, BThreadWork_work_func work_func, void *work_func_user)
 void BThreadWork_Init (BThreadWork *o, BThreadWorkDispatcher *d, BThreadWork_handler_done handler_done, void *user, BThreadWork_work_func work_func, void *work_func_user)
 {
 {
     DebugObject_Access(&d->d_obj);
     DebugObject_Access(&d->d_obj);

+ 9 - 1
threadwork/BThreadWork.h

@@ -62,8 +62,8 @@ typedef void (*BThreadWork_handler_done) (void *user);
 
 
 typedef struct {
 typedef struct {
     BReactor *reactor;
     BReactor *reactor;
-    int num_threads;
     #ifdef BADVPN_THREADWORK_USE_PTHREAD
     #ifdef BADVPN_THREADWORK_USE_PTHREAD
+    int num_threads;
     LinkedList2 pending_list;
     LinkedList2 pending_list;
     struct BThreadWork_s *running_work;
     struct BThreadWork_s *running_work;
     LinkedList2 finished_list;
     LinkedList2 finished_list;
@@ -122,6 +122,14 @@ int BThreadWorkDispatcher_Init (BThreadWorkDispatcher *o, BReactor *reactor, int
  */
  */
 void BThreadWorkDispatcher_Free (BThreadWorkDispatcher *o);
 void BThreadWorkDispatcher_Free (BThreadWorkDispatcher *o);
 
 
+/**
+ * Determines whether threads are being used for computations, or computations
+ * are done in the event loop.
+ * 
+ * @return 1 if threads are being used, 0 if not
+ */
+int BThreadWorkDispatcher_UsingThreads (BThreadWorkDispatcher *o);
+
 /**
 /**
  * Initializes the work.
  * Initializes the work.
  * 
  *