POSIX回调到主线程

时间:2014-02-06 14:43:20

标签: multithreading callback posix cocos2d-x background-thread

我是一名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类使用互斥锁将后台线程的结果添加到线程安全数组。并在主线程中连续运行的方法检查线程安全数组中是否有任何内容。这是一种解决方法,但我认为这样一个简单的任务真的很难看。)

1 个答案:

答案 0 :(得分:0)

使用此命令在cocos2d的主线程中运行代码:

Director::getInstance()->getScheduler()->performFunctionInCocosThread([]{
    // execution in main thread
});