- objective-c - iOS 5 : Can you override UIAppearance customisations in specific classes?
- iphone - 如何将 CGFontRef 转换为 UIFont?
- ios - 以编程方式关闭标记的信息窗口 google maps iOS
- ios - Xcode 5 - 尝试验证存档时出现 "No application records were found"
如何在 NSThread 中等待直到 iOS 中发生某些事件?
例如,我们创建了一个 NSThread 并启动了一个线程循环。在线程循环内部,有条件检查消息队列是否有消息。如果有消息,那么它会调用相应的方法来做一些操作,否则它应该等到消息队列有新消息填充。
是否有任何 API 或方法可用于等待某个事件发生?
For Example
NSThread *thread = [NSThread alloc]....@selector(threadLoop)
- (void)threadLoop
{
// Expecting some API or method that wait until some messages pushed into the message queue
if (...) {
}
}
如有任何帮助,我们将不胜感激。
最佳答案
您可以使用 NSCondition。我在 ViewController 中附加示例代码“准备测试”
@interface ViewController ()
@property (strong, nonatomic) NSCondition *condition;
@property (strong, nonatomic) NSThread *aThread;
// use this property to indicate that you want to lock _aThread
@property (nonatomic) BOOL lock;
@end
@implementation ViewController
- (void)viewDidLoad
{
[super viewDidLoad];
// Do any additional setup after loading the view, typically from a nib.
// start with the thread locked, update the boolean var
self.lock = YES;
// create the NSCondition instance
self.condition = [[NSCondition alloc]init];
// create the thread and start
self.aThread = [[NSThread alloc] initWithTarget:self selector:@selector(threadLoop) object:nil];
[self.aThread start];
}
-(void)threadLoop
{
while([[NSThread currentThread] isCancelled] == NO)
{
[self.condition lock];
while(self.lock)
{
NSLog(@"Will Wait");
[self.condition wait];
// the "did wait" will be printed only when you have signaled the condition change in the sendNewEvent method
NSLog(@"Did Wait");
}
// read your event from your event queue
...
// lock the condition again
self.lock = YES;
[self.condition unlock];
}
}
- (IBAction)sendNewEvent:(id)sender {
[self.condition lock];
// put the event in the queue
...
self.lock = NO;
[self.condition signal];
[self.condition unlock];
}
关于iphone - 如何在 NSThread 中等待直到 iOS 中发生某些事件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17971717/
我有几个线程。我想运行它们以确保它们正在一个接一个地执行。[运行线程1];[运行线程2];当我这样做时,线程 2 正在运行,而无需等待线程 1 完成。我需要这个,因为我需要线程 1 中的值,以便在线程
NSThread 异步下载图片 在IOS中处理多线程有三个方案 , NSThread 、NSOperation 、GCD 。当然GCD应该是最方便的 ,我们一个一个学 。先理解底层的,最后再使用最方便
我正在创建一个新线程,它在每隔一段时间后运行我的一个方法。 现在我正在做的事情如下: NSThread *thread = [[NSThread alloc] initWithTarget:self
我正在开发一款游戏模拟游戏,希望加快比赛模拟速度。在给定日期,可能有 50 多场比赛需要模拟。目前,我循环遍历每个并告诉他们模拟自己,但这可能需要很长时间。我本来希望 1) 覆盖“忙碌”屏幕 2) 为
我有一个 iPhone 应用程序,在其中显示一个从 RSS 提要加载的表格 View 。当 View 加载时,我调用此方法在新的 NSThread 中运行: - (void)start:(NSURL*
是否可以在单独的线程中运行类方法(以“+”开头)?通常我调用像 [myClass myController]; 这样的方法,我尝试了 [NSThread detachNewThreadSelector
我正在使用 NSOperationQueue 来管理一个相当长的 iOS 应用程序阶段,所以我想异步管理它。在那个阶段,我通过直接使用 calloc 函数在 C 中分配大数组。“大”是指 1024x2
为什么我线程的 Retain count = 2?它在启动方法后增加,为什么? Retain 计数如何为 NSThreads 工作 @implementation ViewController - (
因为 NSThread 无法连接 我尝试了下一个方法,它似乎工作正常,但仍然是非常糟糕的解决方案还是足够好? // init thread NSThread *mythread = [[NSThrea
使用 4 NSThread 将 1000 个元素(例如整数元素)添加到数组中。如果添加一个对象需要 1 个时间单位,那么添加 1000 个对象将需要 1000 个时间单位。通过使用 4 个线程,我想将
我目前正在学习IOS Threading编程......我遇到了一个问题: 我的代码来了,请看一下: int main(int argc, const char * argv[]) { @au
这是我创建线程的方式: readFromWebThread = [[NSThread alloc] initWithTarget:self selector:@selector(loadThread:
我有一个触发线程的静态对象,但每当线程尝试执行选择器时,我都会收到“[NSThread initWithTarget:selector:object:]: target does not implem
我正在处理其他人的代码。我遇到了一行代码 [NSThread detachNewThreadSelector:@selector(myMethod) toTarget:self withObject:
我有很多 NSThreads,我想在它们工作的时候 sleep 。我该怎么做? iOS SDK 中是否有 WinApi 函数 WaitForSingleObject/WaitForMultipleOb
我有一个函数,当我的应用程序进入后台模式时它会被调用。如果用户重新打开应用程序,我想停止线程。到目前为止,我尝试的任何方法都不起作用。 到目前为止,这是我的代码: class Neversleep {
我从购买的媒体流 SDK 库中获得 C++ 回调,它在内部创建了多个线程。 具体来说,当库想要记录一条消息时,我会收到回调。有时我在某些 NSThread 的上下文中被调用,那里有一个自动释放池,但有
我正在使用这样的线程, [NSThread detachNewThreadSelector:@selector(myfunction) toTarget:self withObject 线程运行正常,
我想创建一个不是主线程的工作线程,这样我就可以调用 ... [self performSelector:@selector(doStuff) OnThread:self.myWorkerThread
我正在开发一个应用程序,它在读取 XML 文件时使用 NSThread 加载 viewControllers 的内容。 我是这样完成的: -(void)viewDidAppear:(BOOL)anim
我是一名优秀的程序员,十分优秀!