虽然以前用过多线程,但是时间一久再用的话还会出不少问题。我的项目中用到了多线程,为了实现异步请求的效果。主线程负责创建异步请求对象,并将其插入到请求队列中去,如果队列原先为空,则唤醒异步线程,然后直接返回。异步线程则从请求队列中取出异步请求对象,然后调用相关的功能接口,并实现回调。
但当我调试的时候,发现了一个问题。请求对象插入请求队列时,还是很正常的;但当异步线程取出请求对象时,请求对象里指向其他对象的指针已经失效,这让我很郁闷。最后我才发现是因为主线程插入完请求对象后,就没什么工作了,然后就退出了。于是,许多需要用的对象都被提前析构了,异步线程当然找不到他们了。
解决方法也很简单,就是主线程要等所有异步线程退出了后才退出,比如用pthread的join就可以实现。
时间: 2024-10-10 22:33:26