#include "stdafx.h" #include "QueueStrManager.h" QueueStrManager::QueueStrManager(void) { m_pfunc = NULL; InitializeCriticalSection(&m_csQueueList); } QueueStrManager::~QueueStrManager(void) { DeleteCriticalSection(&m_csQueueList); delete[] m_chr; m_chr = NULL; m_pfunc = NULL; } void QueueStrManager::AddString(const char * chr) { EnterCriticalSection(&m_csQueueList); int vlen = strlen(chr); if(m_couter + 1 > m_max_couter || m_length + vlen > m_max_length){ if(m_pfunc == NULL){ LeaveCriticalSection(&m_csQueueList); return; } try { char* pchr = new char[m_max_length]; strcpy(pchr, m_chr); QueueUserWorkItem(m_pfunc, (LPVOID)pchr, WT_EXECUTEDEFAULT); strcpy(m_chr, chr); m_couter = 1; m_length = strlen(chr); } catch(...){ } }else { if(m_couter == 0){ strcpy(m_chr, chr); }else { strcat(m_chr, chr); } m_couter++; m_length += strlen(chr); TRACE(_T("sql counts: %d \r\n"),m_couter); } LeaveCriticalSection(&m_csQueueList); } void QueueStrManager::Execute() { EnterCriticalSection(&m_csQueueList); if(m_length > 0){ if(m_pfunc == NULL){ LeaveCriticalSection(&m_csQueueList); return; } try { char* pchr = new char[m_length + 2]; // Ô¤Áô½áÊø·û strcpy(pchr, m_chr); QueueUserWorkItem(m_pfunc, (LPVOID)pchr, WT_EXECUTEDEFAULT); } catch(...){ } } LeaveCriticalSection(&m_csQueueList); }