1.在一次项目开发过程中,出现使用thread传递参数,线程函数体内执行的时候,参数异常的分析。
2.通过分析代码,因为主函数,过早的退出,导致问题,
thread varThread=thread();
if(varThread.joinable())
{
varThread.detach();
}
之前的参数数据是char *,是一个临时变量,一旦线程异步执行,可能主函数体过早的退出,导致出现异常,线程内函数执行体内,由于栈退出,导致访问野指针,
3.修改点,修改传参的函数类型为string ,每次传递参数过程中,使用的是一次copy,不会出现,由于主函数的退出,导致野指针的问题,代码如下:
(1)有问题代码
void OnVideoReocrdEnd(char * filename)
{
char sid[128]="";
strncpy(sid,transactionId.c_str(),128);
thread_verifyaction = thread(&controlOfCommuntication::verifyVideo,coct,filename,sid);
if(thread_verifyaction.joinable())
{
thread_verifyaction.detach();
}
}
(2)修改之后代码如下
void OnVideoReocrdEnd(string filename)
{
char sid[128]="";
strncpy(sid,transactionId.c_str(),128);
thread_verifyaction = thread(&controlOfCommuntication::verifyVideo,coct,filename,sid);
if(thread_verifyaction.joinable())
{
thread_verifyaction.detach();
}
}