获取线程号和杀不死的NSThread线程
来源:互联网 发布:蓝桥杯c语言300试题 编辑:程序博客网 时间:2024/05/17 07:17
最近我遇到长连接线程,在执行connect闪断导致永远阻塞线程,结果我想杀死这个阻塞的线程,用了九牛二之力也杀不死。希望高手指点一二。我用了伟大的kill -9 pid仍旧干不死它,不甘心啊!
估计是当线程在执行sleep时,不能被杀死。当线程处于wait状态才能被杀死。
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{ [[NSThread currentThread] setName:@"socket thread"]; _socketThread = [NSThread currentThread];// _socketThread.description;// [[NSThread currentThread] start];// while(!_socketThread.is())// {// // }// _socketThread.stop(); NSString * socketThreadDescription = [NSThread currentThread].description; NSRange range = [socketThreadDescription rangeOfString:@"number = "]; NSRange range1 = [socketThreadDescription rangeOfString:@","]; if((range.length <= 0) || ((range1.length <= 0))) { _socketThreadSno = -1; } else { range = NSMakeRange (range.location + range.length, range1.location - range.location - range.length); NSString *number = [socketThreadDescription substringWithRange : range]; _socketThreadSno = [number longLongValue]; } }下面这个普通的NSThread线程获取线程号和上面那个略有不同-(void)socketNSThread{ [[NSThread currentThread] setName:@"socket thread"]; _socketThread = [NSThread currentThread]; // _socketThread.description; // [[NSThread currentThread] start]; // while(!_socketThread.is()) // { // // } // _socketThread.stop(); NSString * socketThreadDescription = [NSThread currentThread].description;// NSRange range = [socketThreadDescription rangeOfString:@"number = "];// NSRange range1 = [socketThreadDescription rangeOfString:@","];// if((range.length <= 0) || ((range1.length <= 0)))// {// _socketThreadSno = -1;// }// else// {// range = NSMakeRange (range.location + range.length, range1.location - range.location - range.length);// NSString *number = [socketThreadDescription substringWithRange : range];// _socketThreadSno = [number longLongValue];// } NSRange range = [socketThreadDescription rangeOfString:@"num = "]; NSRange range1 = [socketThreadDescription rangeOfString:@"}"]; if((range.length <= 0) || ((range1.length <= 0))) { _socketThreadSno = -1; } else { range = NSMakeRange (range.location + range.length, range1.location - range.location - range.length); NSString *number = [socketThreadDescription substringWithRange : range]; _socketThreadSno = [number longLongValue]; } // kill(6, SIGABRT); FLDDLogDebug(@"socket thread");}试过杀线程的方法如下,但都以失败告终,就是我关闭那个连接的socket都引起不了connect的响应。让人无语了!// 下线- (void)OffLine{ FLDDLogDebug(@"函数"); FLDDLogDebug(@"offLine"); long long sno = [SingleAsyncSocket sharedInstance].socketThreadSno; if(-1 != sno) {// [[SingleAsyncSocket sharedInstance] endSocket]; kill((pid_t)sno, SIGKILL);// pthread_kill((__bridge pthread_t)([SingleAsyncSocket sharedInstance].socketThread), SIGQUIT); [[SingleAsyncSocket sharedInstance].socketThread cancel]; } return;}
0 0
- 获取线程号和杀不死的NSThread线程
- NSThread和线程锁
- NSThread线程的常用属性和生命周期
- 线程 NSThread 多线程 获取当前线程
- NSThread(线程)
- NSThread线程间的通信
- Android 关于线程 杀不死 的 开机启动 浮动框
- 获取当前线程ID [NSThread currentThread]
- 控制线程(NSThread)和运行时循环(NSRunLoop)的退出
- 控制线程(NSThread)和运行时循环(NSRunLoop)的退出
- 常驻线程的创建--线程不死之谜
- iphone开发之多线程NSThread和NSInvocationOperation
- iphone开发之多线程NSThread和NSInvocationOperation
- iphone开发之多线程NSThread和NSInvocationOperation
- iphone开发之多线程NSThread和NSInvocationOperation
- iphone开发之多线程NSThread和NSInvocationOperation
- iphone开发之多线程NSThread和NSInvocationOperation
- iphone开发之多线程NSThread和NSInvocationOperation
- 在js文件中 判断符合条件时引入外部js文件
- Javascript的console.log()用法
- MySQL安装脚本 mysql_install_db 详解
- printk输出的位置不如你想象?!
- 二十三种设计模式之行为型模式之中介者模式
- 获取线程号和杀不死的NSThread线程
- SPRING概述
- Android UI 设计(10):ListView 控件和自定义 Adapter(四)
- [总结]算法中的P问题、NP问题、NP完全问题和NP难问题
- c++对象基础
- AC自动机 hdu2222 Keywords Search
- linux c fopen修改已经存在的文件
- Javascript的this用法
- Object-C 中各数据类型转换 NSData转NSString,Byte,UIImage