C++ thread调用偶现传参异常问题分析

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();

}

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值