使用定时器实现线程控制

2014年3月28日14:47:52

使用定时器实现线程控制

1、定时器部分

m_StnCltCtl.initial();
	m_StnCltCtl.checkThread();
	SetTimer(TIMER_ID_STATION_COLLECT,TIMER_TIME_STATION_COLLECT,NULL);

void CCenterTransDlg::OnTimer(UINT_PTR nIDEvent)
{
	// TODO: 在此添加消息处理程序代码和/或调用默认值
	switch(nIDEvent)
	{
	case TIMER_ID_STATION_COLLECT:
		m_StnCltCtl.checkThread();
		break;

	default:
		break;
	}
	CDialog::OnTimer(nIDEvent);
}

2、线程函数

DWORD WINAPI FWorkThread(void *pVoid)  
{  
	StationClollectThreadPara *pPara = (StationClollectThreadPara *)pVoid;

	CString sInfo;
	sInfo.Format(_T("线程开始,站ID:%d"),pPara->m_nStationID);
	DBG_tWriteLogFile(LOG_DEBUG,sInfo);

	for(int i = 0;i<100;i++)  
	{  
		pPara->m_bNormal = true;  
		Sleep(15*1000);  

		sInfo.Format(_T("线程运行,站ID:%d"),pPara->m_nStationID);
		DBG_tWriteLogFile(LOG_DEBUG,sInfo);
	}  

	pPara->m_bAlive = false; 

	sInfo.Format(_T("线程结束,站ID:%d"),pPara->m_nStationID);
	DBG_tWriteLogFile(LOG_DEBUG,sInfo);

	return TRUE;  
}  


3、线程控制函数

bool CStationClollectController::initial()
{
	StationClollectThreadPara aPara;
	aPara.m_bUse = false;
	aPara.m_bAlive = false;
	aPara.m_bNormal = false;
	aPara.m_nStationID = 0;

	for(int i = 0;i<m_nThreadMaxNum;i++)
	{
		m_listThreadPara.push_back(aPara);
	}

	return true;
}

bool CStationClollectController::checkThread()
{
	list<StationClollectThreadPara>::iterator it = m_listThreadPara.begin();
	for(;it != m_listThreadPara.end();it++)
	{
		if((it->m_bUse)&&(!it->m_bAlive))
		{
			it->m_bUse = false;
		}

		if((it->m_bUse)&&(it->m_bAlive))
		{
			if(it->m_bNormal)
			{
				it->m_bNormal = false;
			}
			else
			{
				//进程自杀
				CString sInfo;
				sInfo.Format(_T("线程有问题,进程自杀"));
				DBG_AfxMessageBox(sInfo);

				ExitProcess(0);

				return false;
			}
		}

		if(!it->m_bUse)
		{
			it->m_bUse = true;
			it->m_bAlive = true;
			it->m_bNormal = true;
			it->m_nStationID = g_nStationID;
			g_nStationID ++;
			
			HANDLE hThread = CreateThread(NULL,0,FWorkThread,&(*it),0,NULL);
			CloseHandle(hThread);
		}
	}
	return true;
}





  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值