- 论坛徽章:
- 0
|
本帖最后由 sblig 于 2010-11-22 18:04 编辑
申明一个全局的字符串二维数组
static char p_udp[15000][500];
A 子线程
进行循环给p_udp这个二维字符串赋值
B 子线程
进行读取p_udp这个二维字符串数组
top查看的时候,进程是在不断增长
下面是代码
- //全局控制变量
- static char p_udp[15000][500];
- #define MAXPACKET = 15000
- static int icount = 0;//包序
- static int icountMAX = 0;//包序已经达到最大值保存
- static int icountDB = 0;//当前入库包序
- static int icountDBCur = 0;//当前提交入库
复制代码 A子线程代码如下
- void handle_udp (const u_char* packet)
- {
- ......抓UDP包
- if (size_buf)
- {
- buf = (char *) (packet + size_ip + size_udp + offset);
-
- if(icount >= MAXPACKET)
- {
- icount = 0;
- icountMAX = MAXPACKET;
- }
- if(size_buf>0)
- {
- strncpy(p_udp[icount],buf,size_buf);//这个地方是不断增长的原因
- icount++;
- }
- }
- }
复制代码 B子线程代码如下
- void run_insert(void)
- {
- int irows;
- while(1)
- {
- usleep(30000);
- irows = 0;
- icountDBCur = icount;
- if(icountMAX >= MAXPACKET)
- {
- icountDBCur = icountMAX;
- }
- for(;icountDB < icountDBCur ;icountDB++)
- {
- strcpy(strtemp,p_udp[icountDB]);
- insertDB(strtemp);//入库
- if(iexit)
- {
- EXEC SQL COMMIT;
- return;
- }
- if(icountDB+1 == icountDBCur)
- {
- EXEC SQL COMMIT;
- sprintf(logs,"=======【%d】===【next data is empty】=========\n",icountDB);
- debugLog(logs);
- icountDB++;
- if(icountDB >= MAXPACKET)
- {
- icountDB = 0;
- icountMAX = 0;
- icountDBCur = 0;
- }
- break;
- }
- if(irows > 1000)
- {
- EXEC SQL COMMIT;
- sprintf(logs,"=======【%d】===【accumulate data more 1000】=========\n",irows);
- debugLog(logs);
- icountDB++;
- break;
- }
- irows++;
- }
- }
- }
复制代码 |
|