困扰我的多线程
来源:互联网 发布:java 输出参数 out 编辑:程序博客网 时间:2024/05/22 05:01
第一次使用多线程,很多地方考虑不周,调试过程中遇到了种种问题,开始摸不到头绪,不知道问题在哪里;
今天终于把问题解决了,但是为什么会造成“给已释放的对象发送消息”还是没有弄明白,没看出那个对象它哪里被提前释放了,
是因为开启的多个线程中调用了同一个方法,而方法中的同一个全局变量在这些开启的不同线程中被使用造成的吗?
每次执行到方法
-(void)waitforHostIP
{
while (self.dealmessagesocket.hostIP==nil) {
if (self.multicastsocket.gethostIP!=nil) {
NSLog(@"%@",self.multicastsocket.gethostIP);
self.dealmessagesocket.hostIP=[self.multicastsocket.gethostIPcopy];
}
}
}
中的
self.dealmessagesocket.hostIP=[self.multicastsocket.gethostIP copy];
就会报错;
self.multicastsocket.gethostIP为一个组播类中成员变量,当组播中获取到服务器ip的时候便把ip赋值给它;
- (void)udpSocket:(GCDAsyncUdpSocket *)sock didReceiveData:(NSData *)data
fromAddress:(NSData *)address
withFilterContext:(id)filterContext
{
NSString *message=[[NSStringalloc] initWithData:dataencoding:NSUTF8StringEncoding];
if(message)
{
NSString *ip=[[[NSStringalloc] init]autorelease];
uint16_t port = 0;
[GCDAsyncUdpSocketgetHost:&ip port:&portfromAddress:address];//这里如果我直接把ip换成self.gethostIP,也
//会报错,会在GCDAsyncUdpSocket 中的一个断言处停下来。
self.gethostIP=ip;
}[message release];
}
最后我选择的解决办法是调整了一下消息发送与处理的结构,只开启关于那个方法的一个线程,再调试,便解决了
警醒自己,多多摸索
- 困扰我的多线程
- CRT的多线程困扰
- 我的思想困扰
- 我的困扰
- 一直困扰我的事!!!
- 困扰我多时的500错误问题
- 又一个困扰我的简单问题。
- 困扰我一个小时的问题 SetToolTip
- 困扰我几天的BPEL问题--soap
- 分水岭算法给我的困扰!!
- 困扰了我一天的BUG,哎!
- 最近一直困扰我的问题
- 困扰了我两天的一个exception
- UEFI的继续困扰着我
- 使我困扰的几个C++程序
- 困扰我快一个月的BUG
- 困扰我16小时的bug
- 那些困扰我的计算机术语
- 基于压缩传感的脉冲GPR成像技术研究(硕士学位论文初稿20111230)
- jQuery 导航菜单点击伸缩展开效果的JS特效
- Java 使用poi导入excel,结合xml文件进行数据验证的例子(增加了jar包)
- POJ1002
- 关于字符串驻留
- 困扰我的多线程
- 字符串分段、替换
- JDBC连接SQL Server 2008 R2时遇到的常见问题集解
- @dynamic
- hash表 c语言实现
- oracle Pipelined Table Functions 的使用 (包含split函数的示例)
- 《计算机教育》专题报道:阶梯式教学法
- js 50 个写法
- 更改ListView字体颜色