【发布时间】:2014-03-21 14:19:09
【问题描述】:
我需要为每个“TankId”创建一个线程并在这些线程中进行一些并行处理。 线程完成工作后,我需要销毁线程并删除对象。 我编写了以下代码来为每个“TankId”创建一个线程。但我对此表示怀疑 一旦线程完成其工作(完成执行功能后),如何删除“TLS4_SoapPollClass”类的对象。 我是否需要创建一个对象数组来存储地址?请帮助我理解这个概念。
bool TLS4_SoapManagerClass::CALLBACK_StartThread(int TankId)
{
TLS4_SoapPollClass *_soapPoll = new TLS4_SoapPollClass(TankId);
return true;
}
TLS4_SoapPollClass::TLS4_SoapPollClass(int TankId)
{
int ret = 0;
sprintf(ThreadName,"TankId%d",TankId);
if(InitThread(ThreadName,0))
{
ret = Resume();
}
}
void TLS4_SoapPollClass::Execute()
{
int i = 0;
for(i = 0; i< WMSConfig.PollTankIterations; i++)
{
if (IsItTimeToExit())
{
Debugger.Print(DEBUG_CRITICAL_MSG, "TLS4_SoapPollTank::Execute::Time to
exit. Return tank %hd", this->_tankId);
return;
}
if(!_soap_mgr->CALLBACK_GetReportStatus(this->_tankId))
{
_soap_mgr->AddReqMsg(this->_tankId, TLS4_SOAP_POLL_FOR_TANK_DELIVERIES);
}
else
{
break;
}
ThreadSleep(WMSConfig.PollTankInterval);
}
if(20 == i)
{
_soap_mgr->AddReqMsg(this->_tankId, TLS4_SOAP_REQ_STD_DELIVERIES);
}
_soap_mgr->CALLBACK_SetReportStatus(this->_tankId,0);
Stop();
}
【问题讨论】:
-
我们可以使用
pthread_join阻止线程util它被终止,然后delete吗?我不确定它是否与您提到的“线程已完成其工作”相匹配。 -
你能解释一下什么是线程函数,它的实际工作是什么,
Resume和InitThread函数实际上是做什么的?
标签: c++ multithreading class