/// @file TestConsole.cpp
/// @brief 验证deque's front() 方法
#include "stdafx.h"
#include <windows.h>
#include <tchar.h>
#include <string>
#include <deque>
#ifndef SIZE_OF_WCHAR_ARR
#define SIZE_OF_WCHAR_ARR(x) (sizeof(x) / sizeof(WCHAR))
#endif
#ifndef SAFE_DELETE
#define SAFE_DELETE(p) \
if (NULL != p) \
{ \
delete []p; \
p = NULL; \
}
#endif
typedef struct _tag_info
{
LONGLONG llId;
WCHAR cName[MAX_PATH];
_tag_info()
{
llId = -1;
::ZeroMemory(cName, sizeof(cName));
}
}TAG_INFO;
typedef std::deque<TAG_INFO *> DEQ_INFO;
void LockList();
void UnLockList();
std::wstring StringFormatV(WCHAR * szFormat, ...);
void DoTask(TAG_INFO * pInfo);
void fnTest();
int _tmain(int argc, _TCHAR* argv[])
{
fnTest();
_tprintf(L"\r\nEND, press anykey to quit\r\n");
/// run result
/**
deqInfo.size() = 9
pInfo->llId = 0, pInfo->cName = "llId = 0"
pInfo->llId = 1, pInfo->cName = "llId = 1"
pInfo->llId = 2, pInfo->cName = "llId = 2"
pInfo->llId = 3, pInfo->cName = "llId = 3"
pInfo->llId = 4, pInfo->cName = "llId = 4"
pInfo->llId = 5, pInfo->cName = "llId = 5"
pInfo->llId = 6, pInfo->cName = "llId = 6"
pInfo->llId = 7, pInfo->cName = "llId = 7"
pInfo->llId = 8, pInfo->cName = "llId = 8"
END, press anykey to quit
*/
getwchar();
return 0;
}
void fnTest()
{
BOOL bDlTaskOver = FALSE; ///< 下载任务完成
size_t nIndex = 0;
TAG_INFO * pInfo = NULL;
DEQ_INFO deqInfo;
// fill data to deque
for (nIndex = 0; nIndex < 9; nIndex++)
{
pInfo = new TAG_INFO;
_ASSERT(NULL != pInfo);
pInfo->llId = nIndex;
_tcscpy_s(
pInfo->cName,
SIZE_OF_WCHAR_ARR(pInfo->cName),
StringFormatV(L"llId = %d", pInfo->llId).c_str());
deqInfo.push_back(pInfo);
}
// 用在一个简单下载任务队列, 下载任务执行分先后, 先压入队列的任务,先执行
// 用deque自带的push_back() + front() + pop_front()
// 从deque中取出任务, 干活
_tprintf(L"deqInfo.size() = %d\r\n", deqInfo.size());
while (!bDlTaskOver)
{
// 用deque的front方法,可以省去用 vector::iterator
bDlTaskOver = FALSE;
LockList();
if (deqInfo.size() > 0)
{
pInfo = deqInfo.front();
deqInfo.pop_front();
}
else
{
bDlTaskOver = TRUE;
}
UnLockList();
DoTask(pInfo);
SAFE_DELETE(pInfo);
}
}
std::wstring StringFormatV(WCHAR * szFormat, ...)
{//入参为格式化的参数列表
size_t nStrLen = 0;
WCHAR * pBufMsg = NULL;
std::wstring strRc;
va_list args;
va_start(args, szFormat);
nStrLen = _vsntprintf(NULL, 0, szFormat, args);
pBufMsg = new WCHAR[nStrLen + 1];
_ASSERT(pBufMsg);
::ZeroMemory(pBufMsg, (nStrLen + 1) * sizeof(WCHAR));
nStrLen = _vsntprintf(pBufMsg, nStrLen, szFormat, args);
va_end(args);
strRc = pBufMsg;
delete []pBufMsg;
pBufMsg = NULL;
return strRc;
}
void LockList()
{
/// @todo
}
void UnLockList()
{
/// @todo
}
void DoTask(TAG_INFO * pInfo)
{
if (NULL != pInfo)
{
_tprintf(L"pInfo->llId = %I64d, pInfo->cName = \"%s\"\r\n",
pInfo->llId,
pInfo->cName);
}
}
test deque's front method
最新推荐文章于 2025-07-11 15:30:00 发布