From 2561a007b8d8999a4750046d0cfb3b1ad5af50ac Mon Sep 17 00:00:00 2001 From: zhangmeng <775834166@qq.com> Date: 星期二, 09 四月 2024 15:29:32 +0800 Subject: [PATCH] test for perf --- src/bus_proxy_start.cpp | 77 +++++++++++++++++++++++++++++++++++--- 1 files changed, 71 insertions(+), 6 deletions(-) diff --git a/src/bus_proxy_start.cpp b/src/bus_proxy_start.cpp index a04edad..6029e6e 100644 --- a/src/bus_proxy_start.cpp +++ b/src/bus_proxy_start.cpp @@ -10,10 +10,16 @@ #include <errno.h> #include <getopt.h> #include <stdlib.h> +#include "proc_def.h" +#include "msg_mgr.h" + +using namespace std; #define SVR_PORT 5000 -#define TOTAL_THREADS 2 +#define TOTAL_THREADS 3 + +#define MAX_RETRIES 3 static void *gBusServer_socket = NULL; static void *gServer_socket = NULL; @@ -24,8 +30,10 @@ static int gBusServer_act = 0; static int gBusServer_stat = 0; -pthread_t tids[2]; -void *res[2]; +pthread_t tids[TOTAL_THREADS]; +void *res[TOTAL_THREADS]; + +extern list gLinkedList; void *bus_start(void *skptr) { @@ -39,15 +47,64 @@ return NULL; } - - - void *svr_start(void *skptr) { int port = *(int *)skptr; gServer_socket = net_mod_server_socket_open(port); if(net_mod_server_socket_start(gServer_socket) != 0) { printf("start net mod server failed\n"); + } + + return NULL; +} + +void *check_start(void *skptr) { + int i; + int ret; + int val; + int thres; + int data; + int data_ret; + int total; + void *buf; + int size; + char buf_temp[MAX_STR_LEN] = { 0x00 }; + + struct timespec timeout = {.tv_sec = 3, .tv_nsec = 0}; + + while(true) { + total = gLinkedList.NodeNum(); + for (i = 0; i < total; i++) { + + val = gLinkedList.nodeGet(i); + if (val > 0) { + data_ret = bus_server_socket_wrapper_data_get(gBusServer_socket, val); + thres = gLinkedList.dataGet(val); + if ((data_ret == true) && (thres < MAX_RETRIES)) { + + data = gLinkedList.dataFixGet(val); + sprintf(buf_temp, "%d", i + 1); + ret = bus_server_socket_wrapper_proc_check(gBusServer_socket, data, buf_temp, strlen(buf_temp), &buf, &size, &timeout, BUS_TIMEOUT_FLAG); + if (ret == 0) { + gLinkedList.dataSet(val, 0x00); + + free(buf); + } else { + + gLinkedList.dataSet(val, ++thres); + } + + } else { + + gLinkedList.Delete(val); + if (thres >= MAX_RETRIES) { + bus_server_socket_wrapper_proc_release(gBusServer_socket, val); + } + } + } + } + + sleep(WT_INT); } return NULL; @@ -93,6 +150,10 @@ } } +#if defined(MSG_HANDLER) + msg_init(); +#endif + if (gShm_size == -1) { gShm_size = SHM_RES_SIZE; } @@ -110,6 +171,10 @@ if (gBusServer_stat >= 0) { pthread_create(&tids[1], NULL, svr_start, (void *)&gPort); + + pthread_create(&tids[2], NULL, check_start, NULL); + + //pthread_create(&tids[3], NULL, sem_msg_handler, NULL); } for (i = 0; i< TOTAL_THREADS; i++) { -- Gitblit v1.8.0