gpt4 book ai didi

c++ - 如何在多线程c++程序中删除对象

转载 作者:太空狗 更新时间:2023-10-29 21:43:34 48 4
gpt4 key购买 nike

我需要为每个“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();
}

最佳答案

您可以创建一个数组来保存指向在线程中创建的对象的指针。该数组可以在主线程中创建并作为数据指针(如 void*)传递给线程,以便您可以在线程中将其类型转换回并使用它。

一旦线程退出,就可以清除主线程中的内存。

关于c++ - 如何在多线程c++程序中删除对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22550258/

48 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com