学习:NSThread的使用

学习目的:NSThread的使用

功能:

1):主线程,不做任何事情,如果做事,就会先执行,然后其他事件排后执行,这样导致界面会等待主线程事件完成后,才做其他的响应事件。

(这不是我们的目的,我们的目的是:一边一个事件执行中,一边其他界面的控件能去做事,而不是界面卡住状态!)

2):辅助线程1:申明,然后初始化,然后start,三步完成,停止,可以直接设置一个中间变量来停止,然后cancel,和nil就可以了。

当然:在初始化的时候,要调用你写的函数。

H文件

<pre name="code" class="objc">#import <Cocoa/Cocoa.h>

@interface EDUCATIONDocument : NSPersistentDocument
{
    NSThread *thread_second;
}
@property (assign) IBOutlet NSTextField *m_ET_input;

@property (assign) IBOutlet NSTextField *m_LB_GetValue;

@property (assign) IBOutlet NSTextField *m_LB_Thread1_Show;

@end


 

M文件

//
//  EDUCATIONDocument.m
//  Learn_NSThread
//
//  Created by DMD on 31/7/14.
//  Copyright (c) 2014 EDUCATION. All rights reserved.
//

#import "EDUCATIONDocument.h"

static bool g_thread1_run_flag =false;
static int g_count=0;
@implementation EDUCATIONDocument

@synthesize m_LB_Thread1_Show;
@synthesize m_LB_GetValue;
@synthesize m_ET_input;

- (id)init
{
    self = [super init];
    if (self) {
        // Add your subclass-specific initialization here.
    }
    return self;
}

- (NSString *)windowNibName
{
    // Override returning the nib file name of the document
    // If you need to use a subclass of NSWindowController or if your document supports multiple NSWindowControllers, you should remove this method and override -makeWindowControllers instead.
    return @"EDUCATIONDocument";
}

- (void)windowControllerDidLoadNib:(NSWindowController *)aController
{
    [super windowControllerDidLoadNib:aController];
    // Add any code here that needs to be executed once the windowController has loaded the document's window.
}

+ (BOOL)autosavesInPlace
{
      return YES;
}

- (IBAction)OnBT_Start_Thread1:(id)sender
{
    [self do_thread1];
}

- (IBAction)OnBT_Stop_Thread1:(id)sender
{
    g_thread1_run_flag = false;
    [thread_second cancel];
    thread_second = nil;
}

- (IBAction)OnBT_Now_Station:(id)sender
{
    m_LB_GetValue.stringValue = [NSString stringWithFormat:@"g_thread1_run_flag = %d,g_ount = %d",g_thread1_run_flag,g_count];
}

- (IBAction)OnBT_GetNumber:(id)sender
{
    m_LB_GetValue.stringValue = m_ET_input.stringValue;
}
// Show Top 1 ++
-(void)closeModalWindow:(id)sender
{
    [[NSApplication sharedApplication] stopModal];
}

- (void)windowWillClose:(NSNotification *)notification
{
    [self performSelectorOnMainThread:@selector(closeModalWindow:) withObject:nil waitUntilDone:NO];
}
// Show Top 1 --

-(void)do_thread1
{
    //主线程:不需要申明变量
    [self performSelectorOnMainThread:@selector(thread_function_main) withObject:self waitUntilDone:YES];
    
    //次线程,需要申明
    thread_second = [[NSThread alloc] initWithTarget:self selector:@selector(thread_function_second) object:nil];
    
    //次线程开始
    g_thread1_run_flag = true;
    [thread_second start];
    
    //和次线程一起做的事情
//    [NSThread detachNewThreadSelector:@selector(threadFunc3) toTarget:self withObject:nil];
}

-(void)thread_function_main
{
}

-(void)thread_function_second
{
    if(false == g_thread1_run_flag)
    {
        return ;
    }
    int i=0;
    int j=0;
    int max =100;
    for (i=1; i<max; i++)
    {
        for (j=1; j<max; j++)
        {
            g_count=i*j;
            if (false == g_thread1_run_flag)
            {
                i=max;
                break;
            }
            else
            {
                [NSThread sleepForTimeInterval:0.02f];// = sleep(20 ms)
                self.m_LB_Thread1_Show.stringValue = [NSString stringWithFormat:@"%d x %d  = %d",i,j,g_count];
            }
        }
    }
    
}
//当关闭窗口的时候,执行的事件,属于协议函数 [也可以不用在H里面申明]
- (BOOL)windowShouldClose:(id)window
{
    NSAlert* alert = [[NSAlert alloc] init];
    [alert setAlertStyle:NSInformationalAlertStyle];
    [alert setMessageText:@"Are you sure you want to quit?"];
    [alert addButtonWithTitle:@"Yes"];
    [alert addButtonWithTitle:@"No"];
    NSInteger result = [alert runModal];
    if (result == NSAlertFirstButtonReturn)
    {
        [self OnBT_Stop_Thread1:nil];
        [alert release];
        return YES;
    }
    [alert release];
    return NO;
}
//当关闭窗口的时候 [也可以不用在H里面申明]
- (BOOL)applicationShouldTerminateAfterLastWindowClosed:(NSApplication *)theApplication
{
    return YES;
}

@end


运行效果

测试OK!


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值