线程函数中调用回调函数通知上层调用者数据处理已完,可以进行资源释放了,但不能在回调函数中调释放该线程的函数。(消息函数定义有错误,已改正)

线程函数不应直接调用导致自身终止的函数,否则可能导致程序崩溃。正确的做法是在线程处理结束时,通过回调函数通知上层调用者,但回调函数本身不应释放线程。在C#中,回调后跳出线程再释放资源;在MFC中,使用PostMessage通知其他函数释放资源。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

不能在线程函数中调用其他函数在终止该线程,以下代码的用法是错误的:

std::thread* pThread;
void fun2()
{
	if (pThread->joinable())
	{
		std::cout << pThread->get_id() << std::endl;
		pThread->join();
	        delete pThread;
	        pThread = NULL;
		printf("fun2 is ending\n");
	}
}

void fun1()
{
	printf("this is in fun1\n");
	fun2();

}

int  main()
{
	int i = 0;
	pThread = new std::thread(fun1);
	Sleep(2000);
	printf("main is ending\n");
	return 0;
}

代码会出现的错误如下:
 if (_Thrd_join(_Thr, 0) != _Thrd_success)   // 线程结合(_Thrd_join()是join方法的核心),是阻塞的  
        _Throw_Cpp_error(_NO_SUCH_PROCESS);  

错误原因说明:在线程函数中调用另外一个函数,而该函数在通

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值