DWORD CFTLThreadTester::ProducerThreadFun(void* pParam)
{
CFTLThreadTester* pThis = static_cast<CFTLThreadTester*>(pParam);
for (LONG index = 0; index < 5; index++)
{
CMyTestData* pData = new CMyTestData(index,FALSE);
FTLTRACE(TEXT("ProducerThread Write pData->Index = %d, CurrentTotalCount = %d\n"),
pData->GetCurrentIndex(),CMyTestData::GetTestDataCount());
if (pThis->m_MyTestDataQueue.Append(pData,INFINITE) == ftwtContinue)
{
}
else
{
delete pData;
}
pThis->m_ThreadProducer.SleepAndCheckStop(200);
}
for (LONG index = 6; index < 10; index++)
{
CMyTestData* pData = new CMyTestData(index,FALSE);
FTLTRACE(TEXT("ProducerThread Write pData->Index = %d, CurrentTotalCount = %d\n"),
pData->GetCurrentIndex(),CMyTestData::GetTestDataCount());
{
CFAutoQueueOperator<CMyTestData*> queueOperator(&pThis->m_MyTestDataQueue,pData,TRUE,INFINITE);
if (queueOperator.HaveGotQueue()) //成功获取,并能够加入
{
//Donothing
}
else
{
delete pData;
}
}
pThis->m_ThreadProducer.SleepAndCheckStop(200);
}
//传入要求退出的元素
CMyTestData *pQuitData = new CMyTestData(-1,FALSE);
if (pThis->m_MyTestDataQueue.Append(pQuitData,INFINITE) != ftwtContinue)
{
delete pQuitData;
}
FTLTRACE(TEXT("Now Producer Thread End.\n"));
return 0;
}
DWORD CFTLThreadTester::ResumerThreadFun(void* pParam)
{
CFTLThreadTester* pThis = static_cast<CFTLThreadTester*>(pParam);
CMyTestData* pData = NULL;
while (ftwtContinue == pThis->m_MyTestDataQueue.Remove(pData,INFINITE))
{
LONG dwCurrentIndex = pData->GetCurrentIndex();
if (dwCurrentIndex == -1) //Quit
{
delete pData;
break;
}
pThis->m_ThreadResumer.SleepAndCheckStop(500);
delete pData;
FTLTRACE(TEXT("ResumerThread Read pData->Index = %d, CurrentTotalCount = %d\n"),
dwCurrentIndex,CMyTestData::GetTestDataCount());
}
{
CFAutoQueueOperator<CMyTestData*> queueOperator(&pThis->m_MyTestDataQueue,pData,FALSE,100);
}
//清除
while (pThis->m_MyTestDataQueue.RemoveAfterStop(pData))
{
delete pData;
}
FTLTRACE(TEXT("Now Resumer Thread End, CurrentTotalCount = %d\n"),CMyTestData::GetTestDataCount());
return 0;
}
void CFTLThreadTester::test_CFProducerResumerQueue()
{
m_ThreadProducer.Start(ProducerThreadFun,this);
m_ThreadResumer.Start(ResumerThreadFun,this);
m_ThreadProducer.Wait(INFINITE,TRUE);
m_ThreadResumer.Wait(INFINITE,TRUE);
m_ThreadProducer.Start(ProducerThreadFun,this);
Sleep(1000);
m_ThreadResumer.Start(ResumerThreadFun,this);
Sleep(10);
m_MyTestDataQueue.Stop(); //停止Queue
m_ThreadProducer.Wait(INFINITE,TRUE);
m_ThreadResumer.Wait(INFINITE,TRUE);
}
void CFTLThreadTester::test_CFProducerResumerQueue_ResolveRelease()
{
//测试保留Slot值 --
CPPUNIT_ASSERT(m_MyTestDataQueue.GetCapability() == MAX_QUEUE_COUNT);
CPPUNIT_ASSERT(m_MyTestDataQueue.GetElementCount() == 0); //Queue中没有元素
CPPUNIT_ASSERT(m_MyTestDataQueue.GetReserveSlotCount() == 1); //初始值是1
CPPUNIT_ASSERT(m_MyTestDataQueue.ReserveSlot(1,INFINITE) == ftwtContinue); //可以保留成功
DWORD dwUseSlot = m_MyTestDataQueue.GetCapability() - m_MyTestDataQueue.GetReserveSlotCount();
CPPUNIT_ASSERT(dwUseSlot == 0); //都保留了,可用Slot为0,将不能再加入Element
CMyTestData data(999);
CPPUNIT_ASSERT(m_MyTestDataQueue.Append(&data,100) == ftwtTimeOut); //
CPPUNIT_ASSERT(m_MyTestDataQueue.ReleaseSlot(MAX_QUEUE_COUNT)); //全部释放
CPPUNIT_ASSERT(m_MyTestDataQueue.GetReserveSlotCount() == 0);
CPPUNIT_ASSERT(m_MyTestDataQueue.Append(&data,1000) == ftwtContinue); //此时能成功加入
CMyTestData* pTempData = NULL;
CPPUNIT_ASSERT(m_MyTestDataQueue.Remove(pTempData,1000) == ftwtContinue); //能成功取出
CPPUNIT_ASSERT(pTempData == &data); //取出的就是之前放入的
CPPUNIT_ASSERT(m_MyTestDataQueue.ReserveSlot(1,1000) == ftwtContinue); //恢复保留Slot为1
}
![avatar](https://profile-avatar.csdnimg.cn/736fb1c70ded4de2a2ec38643c161d82_fishjam.jpg!1)
fishjam
- 粉丝: 166
- 资源: 13
最新资源
- 电气安装工 二级工.pdf
- MDM+ESB解决方案-企业数据标准化和服务集成的最佳实践
- 网络工程技术中常用英文术语与配置翻译汇总手册
- 软考中级网络工程师 考前冲刺知识点速记
- 闪烁的霓虹灯文字设计404页面.zip
- 三相时域信号的时序频谱图
- TI C2000F28002x烧录进Flash并正常运行,TMS320F280025C的Flash模式模板工程
- 王道C语言初级阶段(C语言入门)
- 2000-2020年年汇率平均价数据.xls
- 京东美妆爬虫数据集,可以用于大数据分析专业毕设做美妆行业数据分析使用
- 基于Deepseek自动生成单元测试的Idea插件
- 《从买货到销售》系列课,全方位提升你的时尚行业竞争力
- 新玩法AI做漫画小说赛道项目玩法教程,操作简单可批量制作
- 新支付宝无人野路子项目玩法教程,无需露脸,实现被动收入
- jdk11 Windows版本
- 1997-2019年各省进出口总额数据
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
![feedback](https://img-home.csdnimg.cn/images/20220527035711.png)
![feedback](https://img-home.csdnimg.cn/images/20220527035711.png)
![feedback-tip](https://img-home.csdnimg.cn/images/20220527035111.png)
- 1
- 2
- 3
前往页