在这个实例中创建一个接收线程,同时启动三个任务,每个任务对应一个准实时写数据库线程,数据需要写入29张表中,每个任务的数据包频率不小于200包/秒,对于接收线程来说数据包频率达到不小于600包/秒,经过上百此测试显示不会丢一个包,延时不超过3秒,以下代码只贴出了重要部分代码,数据库表只示意性地写了两张表。
1、首先在全局头文件中创建数据结构:
typedef struct _DB_DATA_BUFFER{
struct timeval tv_RecvTime;
UINT32 DataLen;
unsigned char* Data;
}DB_DATA_BUFFER,*PDB_DATA_BUFFER;
2、创建接收线程:
#include "l_global.h"
extern PGLOBAL_DATA pGlobalData;
extern SIGLIST mSIGLIST[TASK_MAX];
void* DataRecvThread(void* UNUSED(arg))
{
int result;
char RecvBuffer[65536];
struct timeval tv_CurrentTime;
int DataLen;
int TaskIndex;
PINT_PACKET pIntPacket;
pIntPacket = (PINT_PACKET)RecvBuffer;
gettimeofday(&tv_CurrentTime,NULL);
std::map<int,int>::iterator iterTaskMap;
while(!pGlobalData->bExit)
{
//receive data from udp net
result = recvfrom(sock[0], RecvBuffer, 65536, 0, (struct sockaddr*)&m_src_addr, &len);
//*************************************************
pGlobalData->LockFormapTaskId.lock();
iterTaskMap = pGlob