Parcourir la source

添加thread文件,增加设置栈的参数

guohui il y a 2 ans
Parent
commit
4a10ecd886
9 fichiers modifiés avec 132 ajouts et 100 suppressions
  1. 1 0
      pro/CMakeLists.txt
  2. 7 7
      pro/src/app.c
  3. 3 2
      pro/src/appweb_handle.c
  4. 3 3
      pro/src/cascade.c
  5. 0 56
      pro/src/sys.c
  6. 0 31
      pro/src/sys.h
  7. 66 0
      pro/src/thread.c
  8. 50 0
      pro/src/thread.h
  9. 2 1
      pro/src/websocket_handle.c

+ 1 - 0
pro/CMakeLists.txt

@@ -69,6 +69,7 @@ set(PDU_SRC_LIST
 	${PROJECT_SOURCE_DIR}/src/dflt.c
 	${PROJECT_SOURCE_DIR}/src/paras.c
 	${PROJECT_SOURCE_DIR}/src/xlist.c
+	${PROJECT_SOURCE_DIR}/src/thread.c
 	${PROJECT_SOURCE_DIR}/src/cascade.c
 	${PROJECT_SOURCE_DIR}/src/main.c
 

+ 7 - 7
pro/src/app.c

@@ -10,7 +10,7 @@
 #include "elog.h"
 #include "sensor_handle.h"
 #include "websocket_handle.h"
-#include "sys.h"
+#include "thread.h"
 
 #include <sys/mman.h>
 #include <string.h>
@@ -1883,10 +1883,10 @@ int _global_device_manage_init(GlobalDeviceManager* _globalDeviceManager)
 
     //创建modbus采集线程 继电器控制线程
     #if(OS_HANDWARE==1)
-    __globalDeviceManage.dev_samp_flag = true;
-    sys_start_thread(THREAD_ID_POWER, power_thread, &__globalDeviceManage);
-    sys_start_thread(THREAD_ID_SENSOR, sensor_thread, &__globalDeviceManage);
-    sys_start_thread(THREAD_ID_SHMW, shm_thread, &__globalDeviceManage);
+    _globalDeviceManager->dev_samp_flag = true;
+    thread_start(THREAD_ID_POWER, power_thread, _globalDeviceManager, 4*MB, 0);
+    thread_start(THREAD_ID_SENSOR, sensor_thread, _globalDeviceManager, 4*MB, 0);
+    thread_start(THREAD_ID_SHMW, shm_thread, _globalDeviceManager, 4*MB, 0);
    #endif
     //创建传感器采集控制线程
 
@@ -1922,9 +1922,9 @@ int _global_device_manage_init(GlobalDeviceManager* _globalDeviceManager)
         log_d("get ntp info from database succeeded");
     }
 
-    sys_start_thread(THREAD_ID_NTP, ntp_thread, NULL);
+    thread_start(THREAD_ID_NTP, ntp_thread, NULL, 4*MB, 0);
 #endif
-    sys_start_thread(THREAD_ID_SNMP, snmp_thread, _globalDeviceManager);
+    thread_start(THREAD_ID_SNMP, snmp_thread, _globalDeviceManager, 4*MB, 0);
     
     //初始化webapp
     websocket_init();

+ 3 - 2
pro/src/appweb_handle.c

@@ -6,6 +6,7 @@
 #include "cJSON.h"
 #include "switch_ctrl.h"
 #include "sys.h"
+#include "thread.h"
 #include "cfg.h"
 #include "cascade.h"
 
@@ -3510,8 +3511,8 @@ static int webSetCallback(void)
 /// @return 
 int appweb_init(void)
 {
-    sys_start_thread(THREAD_ID_UPDATE, update_thread, &__globalDeviceManage);
-    sys_start_thread(THREAD_ID_WEB, web_thread, &__globalDeviceManage);
+    thread_start(THREAD_ID_UPDATE, update_thread, &__globalDeviceManage, 4*MB, 0);
+    thread_start(THREAD_ID_WEB, web_thread, &__globalDeviceManage, 16*MB, 0);
     
     return 0;
 }

+ 3 - 3
pro/src/cascade.c

@@ -3,7 +3,7 @@
 #include "elog.h"
 #include "modbus_handle.h"
 #include "cfg.h"
-#include "sys.h"
+#include "thread.h"
 #include "switch_ctrl.h"
 #include "paras.h"
 
@@ -1056,8 +1056,8 @@ int cascade_init(void)
     set_modbus(cas, get_mb());
     slave_add(cas, 0);
     
-    sys_start_thread(THREAD_ID_CASCADE, cascade_thread, cas);
-    sys_start_thread(THREAD_ID_SCAN, scan_thread, cas);
+    thread_start(THREAD_ID_CASCADE, cascade_thread, cas, 4*MB, 0);
+    thread_start(THREAD_ID_SCAN, scan_thread, cas, 4*MB, 0);
         
     return 0;
 }

+ 0 - 56
pro/src/sys.c

@@ -911,60 +911,4 @@ int sys_get_net(NetworkInfo_t *para, int ipVersion)
 
 
 
-static thread_handle_t myThdHandles[THREAD_ID_MAX]={0};
-int sys_start_thread(int id, thread_fn fn, void *arg)
-{
-    int r;
-    pthread_attr_t attr;
-
-    if(id>=THREAD_ID_MAX) {
-        return -1;        
-    }
-    thread_handle_t *h=&myThdHandles[id];
-
-    h->arg  = arg;
-    h->quit = 0;
-    pthread_attr_init(&attr);
-    //pthread_attr_setstacksize(&attr, 1024*1024*2);
-    
-    r = pthread_create(&h->tid, NULL, fn, h);
-
-    return r;
-}
-
-int sys_stop_thread(int id)
-{
-    if(id>=THREAD_ID_MAX) {
-        return -1;
-    }
-    thread_handle_t *h=&myThdHandles[id];
-
-    h->quit = 1;
-
-#ifdef USE_WEBAPP
-    if(id==THREAD_ID_WEB) {
-    extern void httpStopEndpoints();
-        httpStopEndpoints();
-    }
-#endif
-    pthread_join(h->tid, NULL);
-    h->tid = 0;
-    h->arg = NULL;
-    h->fn  = NULL;
-    
-    return 0;
-}
-
-
-int sys_stop_all_thread(void)
-{
-    int i;
-
-    for(i=0; i<THREAD_ID_MAX; i++) {
-        sys_stop_thread(i);
-    }
-
-    return 0;
-}
-
 

+ 0 - 31
pro/src/sys.h

@@ -16,30 +16,6 @@ enum {
     IP_V6,
 };
 
-enum {
-    THREAD_ID_IO=0,
-    THREAD_ID_WS,
-    THREAD_ID_WEB,
-    THREAD_ID_NTP,
-    THREAD_ID_SNMP,
-    THREAD_ID_POWER,
-    THREAD_ID_SENSOR,
-    THREAD_ID_UPDATE,
-    THREAD_ID_CASCADE,
-    THREAD_ID_SCAN,
-    THREAD_ID_SHMW,
-    
-    THREAD_ID_MAX=30
-};
-
-typedef void *(*thread_fn)(void *arg);
-typedef struct {
-    pthread_t  tid;
-    int        quit;
-    void       *arg;
-    thread_fn  fn;
-}thread_handle_t;
-
 
 int sys_reboot(void);
 int sys_set_factory(void);
@@ -48,11 +24,4 @@ int sys_get_net(NetworkInfo_t *para, int ipVersion);
 int sys_set_net(NetworkInfo_t *para, int ipVersion);
 
 
-int sys_start_thread(int id, thread_fn fn, void *arg);
-int sys_stop_thread(int id);
-int sys_stop_all(void);
-
-
-
-
 #endif

+ 66 - 0
pro/src/thread.c

@@ -0,0 +1,66 @@
+#include "thread.h"
+
+static thread_handle_t myThdHandles[THREAD_ID_MAX]={0};
+
+
+int thread_start(int id, thread_fn fn, void *arg, int stksize, int prio)
+{
+    int r;
+    pthread_attr_t attr;
+
+    if(id>=THREAD_ID_MAX) {
+        return -1;        
+    }
+    thread_handle_t *h=&myThdHandles[id];
+
+    h->arg  = arg;
+    h->quit = 0;
+    pthread_attr_init(&attr);
+    pthread_attr_setstacksize(&attr, stksize);
+    
+    r = pthread_create(&h->tid, &attr, fn, h);
+
+    return r;
+}
+
+int thread_stop(int id)
+{
+    if(id>=THREAD_ID_MAX) {
+        return -1;
+    }
+    thread_handle_t *h=&myThdHandles[id];
+
+    h->quit = 1;
+
+#ifdef USE_WEBAPP
+    if(id==THREAD_ID_WEB) {
+    extern void httpStopEndpoints();
+        httpStopEndpoints();
+    }
+#endif
+    pthread_join(h->tid, NULL);
+    h->tid = 0;
+    h->arg = NULL;
+    h->fn  = NULL;
+    
+    return 0;
+}
+
+
+int thread_stop_all(void)
+{
+    int i;
+
+    for(i=0; i<THREAD_ID_MAX; i++) {
+        thread_stop(i);
+    }
+
+    return 0;
+}
+
+
+
+
+
+
+

+ 50 - 0
pro/src/thread.h

@@ -0,0 +1,50 @@
+#ifndef __THREAD_Hx__
+#define __THREAD_Hx__
+
+#include <pthread.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#define KB  1024
+#define MB  (1024*1024)
+
+
+enum {
+    THREAD_ID_IO=0,
+    THREAD_ID_WS,
+    THREAD_ID_WEB,
+    THREAD_ID_NTP,
+    THREAD_ID_SNMP,
+    THREAD_ID_POWER,
+    THREAD_ID_SENSOR,
+    THREAD_ID_UPDATE,
+    THREAD_ID_CASCADE,
+    THREAD_ID_SCAN,
+    THREAD_ID_SHMW,
+    
+    THREAD_ID_MAX=30
+};
+
+typedef void *(*thread_fn)(void *arg);
+
+typedef struct {
+    pthread_t  tid;
+    int        quit;
+    void       *arg;
+    thread_fn  fn;
+}thread_handle_t;
+
+
+int thread_start(int id, thread_fn fn, void *arg, int stksize, int prio);
+int thread_stop(int id);
+int thread_stop_all(void);
+
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
+

+ 2 - 1
pro/src/websocket_handle.c

@@ -4,6 +4,7 @@
 #include "elog.h"
 #include "common.h"
 #include "sys.h"
+#include "thread.h"
 
 #define WS_MAX    10
 
@@ -109,7 +110,7 @@ int websocket_init(void)
     memset(wh, 0, sizeof(ws_handle_t));
     read_ipaddr(wh);
 
-    sys_start_thread(THREAD_ID_WS, websocket_thread, wh);
+    thread_start(THREAD_ID_WS, websocket_thread, wh, 4*MB, 0);
     return 0;
 }