我是一名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类使用互斥锁将后台线程的结果添加到线程安全数组。并在主线程中连续运行的方法检查线程安全数组中是否有任何内容。这是一种解决方法,但我认为这样一个简单的任务真的很难看。)
答案 0 :(得分:0)
使用此命令在cocos2d的主线程中运行代码:
Director::getInstance()->getScheduler()->performFunctionInCocosThread([]{
// execution in main thread
});