首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >NSCondition:等待指定的时间

NSCondition:等待指定的时间
EN

Stack Overflow用户
提问于 2013-04-19 12:32:25
回答 1查看 578关注 0票数 0

我正在用最新的SDK开发一个iOS 5.0+应用程序。

这个应用程序是从Android应用程序移植而来的。

在Android应用程序中,我有以下代码:

代码语言:javascript
复制
private Object uploadWorkerLock = new Object();
private static final int UPLOAD_WORKER_SLEEP_TIME = 30000;

[ ... ]

synchronized (ServerManager.this.uploadWorkerLock) {
    try {
        ServerManager.this.uploadWorkerLock.wait(UPLOAD_WORKER_SLEEP_TIME);
    } catch (InterruptedException e) {
        return;
    }
}

我对void java.lang.Object.wait(long millis)有个问题。我可以这样迁移代码:

uploadWorkerLock;

代码语言:javascript
复制
[ ... ]
[uploadWorkerLock lock];
[uploadWorkerLock wait];
[uploadWorkerLock unlock];

阅读关于等待(长时间)的Java文档时,我阅读了以下内容:

导致当前线程等待,直到另一个线程调用此对象的notifyAll()方法或notifyAll()方法,或经过指定的时间。

我知道我可以调用elapsed.,但是如何模拟指定的时间有

顺便说一下,这段代码在NSThread selector中。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-04-19 12:55:48

如果您想简单地使用类似于Java的语法来实现它,那么就应该这样做:

代码语言:javascript
复制
@synchronized(uploadWorkerLock)
{
    usleep(UPLOAD_WORKER_SLEEP_TIME*1000);
}

但这并不是唯一的方法,@同步指令的速度不如自旋锁或NSLock。另一种方法是GCD,它允许您同时执行一些代码块(实际上)。它比使用单独的线程更快,因为它将尝试优化事物,并且它可以在同一个线程中运行两个分开的代码块,只需模拟多线程,从而避免了代价高昂的上下文交换。

同样,使用GCD也不难做到,但它需要一些关于块和事情的额外知识,对于刚开始于目标C的人来说,这些知识可能有点混乱。而且,GCD并不是多线程的替代品,当您有一个复杂的应用程序,并且每个线程都不只是执行一个代码块时,普通多线程就更合适了。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/16104678

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档