sleep() 不像我预期的那样工作

Posted

技术标签:

【中文标题】sleep() 不像我预期的那样工作【英文标题】:sleep() does not work as I expected 【发布时间】:2012-06-13 16:57:30 【问题描述】:

我在使用 sleep() 时遇到了一些问题。我有 10 个 UIButtons 连接到同一个名为“buttons:”的 IBAction。现在,IBAction 方法应该禁用所有按钮并将它们的背景颜色变为红色,然后调用一个名为“nextButtonToEnable”的方法,该方法首先有一个 sleep(1),然后是一个随机 int,由一个变为 1 的开关使用启用的按钮和蓝色而不是红色。现在问题来了,我希望所有按钮在按下时都变成红色,然后在 1 秒延迟后,另一个按钮会变成蓝色,但这不会发生,真正发生的是当我按下蓝色按钮时,它在整个延迟 1 秒,然后它变成红色,另一个按钮变成蓝色。

这是我的代码

.h:

#import <UIKit/UIKit.h>

@interface ViewController : UIViewController 
    IBOutlet UIButton *b1;
    IBOutlet UIButton *b2;
    IBOutlet UIButton *b3;
    IBOutlet UIButton *b4;
    IBOutlet UIButton *b5;
    IBOutlet UIButton *b6;
    IBOutlet UIButton *b7;
    IBOutlet UIButton *b8;
    IBOutlet UIButton *b9;
    IBOutlet UIButton *b10;

-(void)nextButtonToEnable;


@end

.m:

-(IBAction)buttons:(id)sender 
b1.enabled = NO;
b2.enabled = NO;
b3.enabled = NO;
b4.enabled = NO;
b5.enabled = NO;
b6.enabled = NO;
b7.enabled = NO;
b8.enabled = NO;
b9.enabled = NO;
b10.enabled = NO;
b1.backgroundColor = [UIColor redColor];
b2.backgroundColor = [UIColor redColor];
b3.backgroundColor = [UIColor redColor];
b4.backgroundColor = [UIColor redColor];
b5.backgroundColor = [UIColor redColor];
b6.backgroundColor = [UIColor redColor];
b7.backgroundColor = [UIColor redColor];
b8.backgroundColor = [UIColor redColor];
b9.backgroundColor = [UIColor redColor];
b10.backgroundColor = [UIColor redColor];

[self nextButtonToEnable];


-(void)nextButtonToEnable 

sleep(1);

int nextButton = rand() % 10;

switch (nextButton) 
    case 0:
        b1.enabled = YES;
        b1.backgroundColor = [UIColor blueColor];
        break;
    case 1:
        b2.enabled = YES;
        b2.backgroundColor = [UIColor blueColor];
        break;
    case 2:
        b3.enabled = YES;
        b3.backgroundColor = [UIColor blueColor];
        break;
    case 3:
        b4.enabled = YES;
        b4.backgroundColor = [UIColor blueColor];
        break;
    case 4:
        b5.enabled = YES;
        b5.backgroundColor = [UIColor blueColor];
        break;
    case 5:
        b6.enabled = YES;
        b6.backgroundColor = [UIColor blueColor];
        break;
    case 6:
        b7.enabled = YES;
        b7.backgroundColor = [UIColor blueColor];
        break;
    case 7:
        b8.enabled = YES;
        b8.backgroundColor = [UIColor blueColor];
        break;
    case 8:
        b9.enabled = YES;
        b9.backgroundColor = [UIColor blueColor];
        break;
    case 9:
        b10.enabled = YES;
        b10.backgroundColor = [UIColor blueColor];
        break;

    default:
        break;


所以它就像睡眠是在 b1.enabled = NO; 之间。和 b1.backgroundColor = [UIColor redColor];.

我如何解决这个问题,因为我在互联网上没有找到任何东西。主要是因为我不知道要搜索什么:P。

【问题讨论】:

【参考方案1】:

sleep() 已弃用,请改用 Sleep()(大写 S)

如果你想让你的进程休眠 1 秒,你需要这样做:

Sleep(1000);

其中 1000 是毫秒

【讨论】:

我已经阅读了关于 Sleep 的信息,它给了你一个警告“语义问题:函数 'Sleep' 的隐式声明在 C99 中无效”【参考方案2】:

您可能应该使用performSelector:withObject:afterDelay: 而不是sleep()

【讨论】:

谢谢,我输入了 [self performSelector:@selector(nextButtonToEnable) withObject:nil afterDelay:1];在 IBAction 中,它起作用了:D【参考方案3】:
#include <stdlib.h>

这会解决你的问题。

【讨论】:

为了提高您的回答质量,请说明您的帖子将如何/为何解决问题。

以上是关于sleep() 不像我预期的那样工作的主要内容,如果未能解决你的问题,请参考以下文章

变形金刚 BartTokenizer::add_tokens() 不像我对后缀的预期那样工作

这个节点不像我想象的那样工作?

Android布局权重不像我想的那样工作

异步函数的行为不像我对 Jest 的预期那样

使用 Linq 除了不像我想的那样工作

UITableViewAutomaticDimension 不像预期的那样工作。迅速