我是一名 iOS 程序员,目前正在使用 Cocos2d-X 创建一个 Android-iOS 应用程序。
我想在后台线程中运行一个函数(解压缩文件,需要 2-3 秒),当它准备好时,我想对主线程进行回调。在解压过程中有一个小的加载动画,它必须运行。
这对于 GCD 来说是一项非常简单的任务:
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
// Unzipping here.
dispatch_async(dispatch_get_main_queue(),^{
[self callbackWithResult:result]; // Call some method and pass the result back to main thread
});
});
但在这里我必须使用独立于平台的 POSIX。阅读一些教程,但我能做的最好的就是在后台线程完成后将其加入主线程。问题是 pthread_join 阻塞了主线程,这会停止我的加载动画。这是我使用的教程:https ://computing.llnl.gov/tutorials/pthreads/#Joining
(内置的 CCHttpRequest 类使用互斥体将后台线程的结果添加到线程安全数组中。并在主线程中连续运行一个方法来检查线程安全数组中是否有任何内容。这是一种解决方法,但我认为对于这么简单的任务来说真的很难看。)