QueueStrManager.cpp 1.4 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374
  1. #include "stdafx.h"
  2. #include "QueueStrManager.h"
  3. QueueStrManager::QueueStrManager(void)
  4. {
  5. m_pfunc = NULL;
  6. InitializeCriticalSection(&m_csQueueList);
  7. }
  8. QueueStrManager::~QueueStrManager(void)
  9. {
  10. DeleteCriticalSection(&m_csQueueList);
  11. delete[] m_chr;
  12. m_chr = NULL;
  13. m_pfunc = NULL;
  14. }
  15. void QueueStrManager::AddString(const char * chr)
  16. {
  17. EnterCriticalSection(&m_csQueueList);
  18. int vlen = strlen(chr);
  19. if(m_couter + 1 > m_max_couter || m_length + vlen > m_max_length){
  20. if(m_pfunc == NULL){
  21. LeaveCriticalSection(&m_csQueueList);
  22. return;
  23. }
  24. try
  25. {
  26. char* pchr = new char[m_max_length];
  27. strcpy(pchr, m_chr);
  28. QueueUserWorkItem(m_pfunc, (LPVOID)pchr, WT_EXECUTEDEFAULT);
  29. strcpy(m_chr, chr);
  30. m_couter = 1;
  31. m_length = strlen(chr);
  32. }
  33. catch(...){
  34. }
  35. }else {
  36. if(m_couter == 0){
  37. strcpy(m_chr, chr);
  38. }else {
  39. strcat(m_chr, chr);
  40. }
  41. m_couter++;
  42. m_length += strlen(chr);
  43. TRACE(_T("sql counts: %d \r\n"),m_couter);
  44. }
  45. LeaveCriticalSection(&m_csQueueList);
  46. }
  47. void QueueStrManager::Execute()
  48. {
  49. EnterCriticalSection(&m_csQueueList);
  50. if(m_length > 0){
  51. if(m_pfunc == NULL){
  52. LeaveCriticalSection(&m_csQueueList);
  53. return;
  54. }
  55. try
  56. {
  57. char* pchr = new char[m_length + 2]; // Ô¤Áô½áÊø·û
  58. strcpy(pchr, m_chr);
  59. QueueUserWorkItem(m_pfunc, (LPVOID)pchr, WT_EXECUTEDEFAULT);
  60. }
  61. catch(...){
  62. }
  63. }
  64. LeaveCriticalSection(&m_csQueueList);
  65. }