使用多线程做一个简单秒表

在main.storyboard创建如下界面



@interface ViewController : UIViewController

@property (weak, nonatomic) IBOutlet UILabel *timeLabel;
@property (weak, nonatomic) IBOutlet UIButton *startBtn;
@property (weak, nonatomic) IBOutlet UIButton *resetBtn;

@end
 
  

 


@interface
ViewController () { int _seconds;//秒数 dispatch_queue_t _queue;//线程队列 BOOL _isPause;//是否暂停 NSCondition *_condition;//加锁 } @end @implementation ViewController - (void)viewDidLoad { [super viewDidLoad]; //锁要初始化!!! _condition = [[NSCondition alloc]init]; } #pragma mark-点击 开始/暂停/继续 按钮 - (IBAction)clickStartBtn:(UIButton *)sender { if (_queue==NULL) { //点击开始按钮 _seconds = 0; _isPause = NO; [_startBtn setTitle:@"暂停" forState:UIControlStateNormal]; //禁用重置按钮 _resetBtn.enabled = NO; //开启线程,进行计时 //GCD //创建队列 _queue = dispatch_get_global_queue(0, 0); //开启线程 dispatch_async(_queue, ^{ while (YES) { //加锁 [_condition lock]; //不断的计时 //睡一秒 [NSThread sleepForTimeInterval:0.1]; //判断是否暂停计时 if (_isPause) { //等待 [_condition wait]; } //累加时间 _seconds++; //不断的更新标签上的时间(主线程) dispatch_async(dispatch_get_main_queue(), ^{ _timeLabel.text = [NSString stringWithFormat:@"%02d:%02d",_seconds/60,_seconds%60]; }); //解锁 [_condition unlock]; } }); }else if ([_startBtn.titleLabel.text isEqualToString:@"暂停"]){ //点击暂停按钮 [_startBtn setTitle:@"继续" forState:UIControlStateNormal]; //开启重置按钮 _resetBtn.enabled = YES; //让线程暂时停止计时 _isPause = YES; }else if ([_startBtn.titleLabel.text isEqualToString:@"继续"]){ //点击继续按钮 [_startBtn setTitle:@"暂停" forState:UIControlStateNormal]; //禁用重置按钮 _resetBtn.enabled = NO; //加锁 [_condition lock]; //取消暂停状态 _isPause = NO; //继续计时,发送消息 [_condition signal]; //解锁 [_condition unlock]; } } #pragma mark-点击复位按钮 - (IBAction)clickReSetBtn:(UIButton *)sender { //更新界面 [_startBtn setTitle:@"开始" forState:UIControlStateNormal]; _timeLabel.text = @"00:00"; //更新默认的值 _queue = NULL; }
@end;

 

转载于:https://www.cnblogs.com/miaokuan/p/6078292.html

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值