学习:NSThread的使用
来源:互联网 发布:湖南省干部培训网络 编辑:程序博客网 时间:2024/05/16 16:01
学习目的: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!
0 0
- 学习:NSThread的使用
- NSThread的使用
- NSThread的使用
- NSThread的使用
- NSThread的使用
- 88-NSThread的使用
- NSThread的使用
- NSThread的使用
- NSThread的使用
- NSThread的简单使用
- NSThread的使用
- NSThread的使用
- 多线程之NSThread的使用
- 63 NSThread的基本使用
- 网络多线程-NSThread的使用
- 222,NSThread类的使用
- 多线程之NSThread的使用
- 多线程之NSThread的使用
- QT5静态编译教程,主要针对vs2012
- 转载:disruptor简介
- Thrift框架中函数栈的大小对程序的影响
- Errors running builder 'DeploymentBuilder' on project '
- 3.0 的点击事件,CCTouchDelegate已经停用了
- 学习:NSThread的使用
- JavaMail
- HtmlUnit抓取Ajax网页,例子是去哪儿机票
- Android Push消息推送
- 在eclipse中关联android源码
- Android IllegalArgumentException: Cannot draw recycled bitmaps解决方法
- c++复制/拷贝构造函数
- 工具UltraEdit破解使用方法!!!
- 正则表达式大全