0 0

线程退出问题 [NSThread sleepForTimeInterval:60] 5

大家好?
请问 子线程执行到 [NSThread  sleepForTimeInterval:60] 时,如果立即退出子线程?
像C#就有Abort() ;    java 就有interrupt() 强制退出线程的功能,不知到ObjC要用什么方法呢?

在主线程 呼叫 [threadcancel] 时,
子线程正好执行到 [NSThread  sleepForTimeInterval:60] ,所以必须等60秒后,才能跳出循环。
具体代码如下:

-(void)countWork:(id)sender
{
    while (i<=20 && ![thread isCancelled]) 
    {
        //如果您的应用程序或线程是长期存在的,并且会潜在地生成大量的自动释放对象,那么您应该定期地销毁和创建自动释放池(像Application Kit在主线程中所做的那样),否则,自动释放对象会产生堆积且您的内存占用量也会增长。
        NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init]; 
        i++;
        NSLog(@"%d",i);
        [self performSelectorOnMainThread:@selector(ReceviedCount:) withObject:[NSNumber numberWithInt:i] waitUntilDone:NO];
        [pool release];
        [NSThread  sleepForTimeInterval:60];    //子线程执行到这里 这个时候主线程调用 [thread isCancelled]  ,线程不会马上退出,有什么办法可以让线程 强制退出
    }
    [self performSelectorOnMainThread:@selector(StopEvent:) withObject:self waitUntilDone:NO];

}
-(void)ReceviedCount:(NSNumber*)obj        //在该线程下(UI线程)  obj估计发了一次retain
{
    NSLog(@"a:%d",[obj intValue]);
    //[NSThread sleepForTimeInterval:3];
    NSLog(@"-----------------b:%d",[obj intValue]);
    lblInfo.text = [NSString stringWithFormat:@"%d",[obj intValue]];
}
-(void)StopEvent:(id)sender
{
    [btnStart setEnabled:TRUE];
    [btnStart setTitle:@"启动线程" forState:UIControlStateNormal];
    [thread release];
}

-(IBAction)Start:(id)sender
{    
    i=0;
    thread =[[NSThread alloc] initWithTarget:self selector:@selector(countWork:) object:nil];
    [thread start];
    
    [btnStart setEnabled:FALSE];
    [btnStart setTitle:@"" forState:UIControlStateDisabled];
}
-(IBAction)Stop:(id)sender
{
    [thread cancel];
}


iOS 
2011年4月14日 08:04
目前还没有答案

相关推荐

    图片库上传

    // [NSThread sleepForTimeInterval:1]; CustomUploadQueue *upQueue = [[CustomUploadQueue alloc] init]; upQueue.fundelegate = self; [upQueue startUpload:data imageView:aImageView]; [queue ...

    iOS多线程 (pthread,NSThread)简单Demo

    在实际应用中,NSThread提供了更方便的线程管理,比如`isFinished`和`isCancelled`属性来检查线程状态,以及`-[NSThread sleepForTimeInterval:]`来使线程暂停。然而,由于它不直接管理线程的生命周期,可能导致资源...

    OC-sleepForTimeInterval

    `sleepForTimeInterval:`是Objective-C中的一个关键函数,它属于`NSThread`类,用来让当前线程暂停执行指定的时间。这个方法在多线程编程和定时任务中非常常见。 `sleepForTimeInterval:`函数的签名如下: ```objc ...

    IOS应用源码——NSThread.zip

    5. **线程间的通信**:NSThread提供了`-[NSThread sleepForTimeInterval:]`和`-[NSThread sleepUntilDate:]`来实现线程等待,以及`[self performSelector:onThread:withObject:waitUntilDone:]`来在指定线程上执行...

    多线程GCD,NSThread,NSOperationQueue,详细解释Demo

    在子线程中刷新UI,通常需要回到主线程执行,无论使用GCD、NSThread还是NSOperationQueue,都需要确保UI更新在主线程进行,以免出现界面卡顿或数据不一致的问题。例如,可以使用`DispatchQueue.main.async`、`-...

    io后台运行demo

    -(id) init { self = [super init]; if(self) { bgTask = UIBackgroundTaskInvalid; expirationHandler =nil;... [NSThread sleepForTimeInterval:10]; //wait for finish } [self playAudio]; }); }

    objective-c小技巧

    2.延时函数: [NSThread sleepForTimeInterval:3]; [self performSelector:@selector(machineBallAction) withObject:nil afterDelay:0]; 3.实现随机数:srandom(time(NULL)); 4. #pragma mark - #pragma ...

    线程同步dispatch_barrier_(a)sync1

    [NSThread sleepForTimeInterval:1.0]; NSLog(@"我是barrier"); } NSLog(@"aa"); ``` 在这个例子中,"aa" 会被立即打印出来,然后是任务1、任务2和任务3,最后是屏障任务 "我是barrier" 和任务4、任务5。 对比...

    NSThread线程交互

    当线程的任务执行完毕后,可以通过调用`exit`方法退出线程,但这并不推荐,因为这可能导致资源泄露。通常,线程会自然地结束,除非它被设置为守护线程(daemon thread)。 在实际应用中,NSThread常与RunLoop结合...

    实例解析iOS应用多线程开发中NSthread类的用法

    NSOperationQueue和GCD(Grand Central Dispatch)是常见的多线程解决方案,但这里我们将专注于NSThread类的使用,这是一种在Objective-C中创建和管理线程的传统方式。 一、NSThread的初始化 NSThread类提供了两种...

    演示多线程加载图片NSThread NsOperation GCD

    GCD的优势在于简洁的API和自动调度,可以根据系统负载优化执行顺序,同时避免了线程管理和同步问题。 在实际应用中,这三种方式各有优缺点。`NSThread`适合简单场景,`NSOperation`更适合需要复杂控制的任务,而GCD...

    iOS多线程之NSThread详解

    iOS多线程开发一 使用NSThread ...但是需要注意在主线程中仅仅能设置线程状态,并不能真正停止当前线程,如果要终止线程必须在线程中调用exist方法,这是一个静态方法,调用该方法可以退出当前线程。

    iOS多线程开发NSThread.pdf

    在使用 NSThread 时,需要注意线程之间的同步问题。 iOS 提供了多种方式来解决这个问题,包括使用原子操作、mutex 和 lock 等机制。开发者需要根据实际情况选择合适的同步机制来确保线程之间的安全访问。 NSThread ...

    IOS应用源码——ui多线程的简单例子 NSThread.zip

    这个名为"NSThread.zip"的压缩包提供了一个简单的iOS应用源码示例,专门用于演示如何在iOS中使用NSThread进行多线程编程。 首先,我们要理解什么是多线程。在计算机系统中,线程是操作系统调度的基本单位,一个进程...

    NSThread多线程

    还可以调用`cancel`方法来取消线程,但需要注意,这并不会立即停止线程,而是设置`isCancelled`为`true`,需要在线程内部检查此标志并适时退出。 4. 线程同步:如果你需要在线程间进行通信,可以使用`NSThread`s的`...

    iOS多线程开发——NSThread浅析

    在`run`方法中,我们可以看到`currentThread`用于获取当前线程,`sleepForTimeInterval:`则模拟了线程的延迟执行,`mainThread`则用于获取主线程。 其次,NSThread还提供了在后台执行任务的功能。使用`...

    iOS多线程编程之NSThread的使用案例

    iOS多线程编程之NSThread的使用案例源码,1、简介:1.1 iOS有三种多线程编程的技术,分别是:1.、NSThread 。2、Cocoa NSOperation (iOS多线程编程之NSOperation和NSOperationQueue的使用)3、GCD 全称:Grand ...

    IOS nsthread开辟一个分线程

    标题提到的"IOS nsthread开辟一个分线程"就是iOS中利用`NSThread`类来创建并运行一个新的线程的方法。下面我们将深入探讨`NSThread`以及如何在iOS应用中使用它来实现多线程。 一、`NSThread`简介 `NSThread`是苹果...

    iOS多线程编程技术之NSThread、Cocoa NSOperation、GCD

    - **注意事项**:使用`NSThread`时需要注意同步和互斥问题,避免多个线程同时访问同一资源导致的数据竞争或死锁。 2. **NSOperation** - **简介**:`NSOperation`是`Foundation`框架提供的一个用于执行任务的类,...

    ios多线程编程

    还需要注意线程与用户界面的交互,以及线程退出时的行为。 创建线程的技术包括使用NSThread类、POSIX的多线程、NSObject类以及其他线程技术。配置线程属性时,可以设置线程的堆栈大小和线程本地存储等。 线程管理...

Global site tag (gtag.js) - Google Analytics