我正在用最新的SDK开发一个iOS 5.0+应用程序。
这个应用程序是从Android应用程序移植而来的。
在Android应用程序中,我有以下代码:
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;
[ ... ]
[uploadWorkerLock lock];
[uploadWorkerLock wait];
[uploadWorkerLock unlock];阅读关于等待(长时间)的Java文档时,我阅读了以下内容:
导致当前线程等待,直到另一个线程调用此对象的notifyAll()方法或notifyAll()方法,或经过指定的时间。
我知道我可以调用elapsed.,但是如何模拟指定的时间有
顺便说一下,这段代码在NSThread selector中。
发布于 2013-04-19 12:55:48
如果您想简单地使用类似于Java的语法来实现它,那么就应该这样做:
@synchronized(uploadWorkerLock)
{
usleep(UPLOAD_WORKER_SLEEP_TIME*1000);
}但这并不是唯一的方法,@同步指令的速度不如自旋锁或NSLock。另一种方法是GCD,它允许您同时执行一些代码块(实际上)。它比使用单独的线程更快,因为它将尝试优化事物,并且它可以在同一个线程中运行两个分开的代码块,只需模拟多线程,从而避免了代价高昂的上下文交换。
同样,使用GCD也不难做到,但它需要一些关于块和事情的额外知识,对于刚开始于目标C的人来说,这些知识可能有点混乱。而且,GCD并不是多线程的替代品,当您有一个复杂的应用程序,并且每个线程都不只是执行一个代码块时,普通多线程就更合适了。
https://stackoverflow.com/questions/16104678
复制相似问题