iphone - 等待 NSThread

标签 iphone winapi ipad ios

我有很多 NSThreads,我想在它们工作的时候 sleep 。我该怎么做? iOS SDK 中是否有 WinApi 函数 WaitForSingleObject/WaitForMultipleObjects 的模拟?

最佳答案

有很多方法,但我的主要建议是考虑使用 libdispatch。

不要生成 NSThreads,而是:

dispatch_group_t group = dispatch_group_create();
dispatch_group_async(group, dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
    /* work to do in a thread goes here */
});
/* repeat for other threads */
dispatch_group_wait(group, DISPATCH_TIME_FOREVER); //wait for all the async tasks in the group to complete

参见 http://developer.apple.com/library/mac/#documentation/Darwin/Reference/ManPages/man3/dispatch_group_async.3.html用于文档。

另一种方法是使用信号量,posix 或 dispatch(http://www.csc.villanova.edu/~mdamian/threads/posixsem.html 有一些信息,http://developer.apple.com/library/ios/#documentation/General/Conceptual/ConcurrencyProgrammingGuide/OperationQueues/OperationQueues.html 也有)。

(编辑以添加一个替代方案):

如果您的所有线程都在做基本相同的工作(即拆分任务而不是执行一堆不同的任务),这也会很好地工作,并且要简单得多:

dispatch_apply(count, dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^(size_t i){
 doWork(someData, i);
});

关于iphone - 等待 NSThread,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4845451/

相关文章:

c++ - winapi C++ HICON

iphone - iOS 从表格 View 单元格拖放到 ImageView

android - 有没有一种简单的方法可以将 Android 应用程序转换为 iPad、iPhone

iphone - ALAssetsLibrary 获取视频路径稍后播放

c++ - DsMakeSpn 在 Windows Server 2008 上总是失败

iphone - 为什么OpenGL(IOS)中有.pvr文件

c++ - 没有 ATL/WTL/MFC/SDK/etc 的 WinAPI Aero Glass

ios - 我需要为 iPad 应用程序添加 @2x 和 @3x 图像吗?

带有状态栏和导航栏的 iPhone 屏幕尺寸?

iphone - 使用 UIImage drawInRect 仍然将其呈现为上下颠倒