【问题标题】:Keep Checking till True继续检查直到真实
【发布时间】:2011-10-28 18:39:16
【问题描述】:

继续检查是否发生了某件事以及如果发生了某件事则执行一组命令的最有效方法是什么? (我正在使用 C 和 Obj-C)

【问题讨论】:

    标签: objective-c c conditional-statements


    【解决方案1】:

    我发现最好是创建一个在后台运行直到满足条件的线程

    【讨论】:

      【解决方案2】:

      使用这个。

      NSTimer *newTimer = [NSTimer timerWithTimeInterval:5 target:self 选择器:@selector(checkBoolValue) userInfo:nil repeats:YES];

      此方法将在每 5 秒后运行一次 checkBoolValue。

      现在,当你的布尔值被设置时,然后停止计时器

      [newTimer 无效];

      newTimer = nil;

      【讨论】:

        【解决方案3】:

        您可以使用忙等待(坏主意,因为您浪费了 cpu 周期):

        while (true){
             if(CheckConditionTrue()){
                 doSomething();
             }
        }
        

        更好的是使用select 函数和超时,例如,如果您正在等待文件描述符事件。使用 select 函数,您可以侦听给定文件描述符上发生的事件。执行被阻止,直到事件发生或达到超时限制。

        如果不使用或者不能使用select,使用I timeout(还是比忙着等待好):

        while (true){
            nextTimeInterval();
            //do what you want
        }
        
        void nextTimeInterval(){
            sleep (INTERVAL_TO_SLEEP);
            return;
        }
        

        【讨论】:

          【解决方案4】:

          取决于什么样的“某些东西”。通常最有效的方法是让执行“某些事情”的事情通知您,例如使用信号量、条件变量或异步 I/O 库。然后你就睡觉等待通知。你需要调用什么函数来等待取决于它是什么类型的通知。

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2021-11-08
            • 2013-01-06
            • 1970-01-01
            • 2012-11-18
            • 2014-07-28
            • 2012-01-31
            • 2013-01-10
            • 1970-01-01
            相关资源
            最近更新 更多