#pragma once

#include "constdef.h"

// sql语句缓存队列
class QueueStrManager
{
	typedef DWORD (WINAPI *PFCALLBACK)(const char* lparam);
private:
	char* m_chr; // 需要执行的语句
	int m_couter; // 
	int m_length; // 长度
	int m_max_couter; // 最大字符数
	int m_max_length; // 最大长度
	ULONGLONG m_last_exec_time; // 最后一次执行时间，如果长时间没有新的语句产生，可根据时间执行缓存的数据。
	PFCALLBACK m_pfunc; // 回调方法
	CRITICAL_SECTION m_csQueueList; // 锁
public:
	QueueStrManager(void);
	QueueStrManager(int c, int l, PFCALLBACK func ):
		m_max_couter(c),
		m_max_length(l),
		m_couter(0), 
		m_length(0),
		m_pfunc(func),
		m_last_exec_time(::GetCurrentTime())
	{
		m_chr = new char[m_max_length];
		InitializeCriticalSectionAndSpinCount(&m_csQueueList, MAXCRITICALSECTIONSPINCOUNT);
	};
	~QueueStrManager(void);
	void AddString(const char * chr);
	void Execute(bool bExit = true);
};