Cocos2dx 3.x Androidでのマルチスレッドロードの問題(thread exiting,not yet detached)

1078 ワード

cococos 2 dxのアップグレードに伴い、3.0バージョンからpthreadを廃止し、C++11で新しく加入したstd::threadに変更し、個人的には後者の方が使いやすいと感じました.
タイトルに記載されているような問題はpthreadとstd::threadで発生します.具体的な原因はここでは詳しく説明しません.接続中のブログを参照してください.
Cocos 2 d-x 3.0マルチスレッド非同期リソースロード
ここではstd::threadの場合の骨の折れるルーチンのみを貼り付けます.
JNIはAndroidでしか使えないので、プラットフォームの区分処理が欠かせません
ヘッダファイルには次のものが含まれます.
#if(CC_TARGET_PLATFORM == CC_PLATFORM_ANDROID)
#include "platform/android/jni/JniHelper.h"
#include
#endif

コード処理:
#if(CC_TARGET_PLATFORM == CC_PLATFORM_ANDROID)
    JavaVM *vm; 
    JNIEnv *env; 
    vm = JniHelper::getJavaVM(); 
  
    JavaVMAttachArgs thread_args; 
  
    thread_args.name = "Resource Load"; 
    thread_args.version = JNI_VERSION_1_4; 
    thread_args.group = NULL; 
  
    vm->AttachCurrentThread(&env, &thread_args);
#endif

    //            
    // ...

#if(CC_TARGET_PLATFORM == CC_PLATFORM_ANDROID)
    vm->DetachCurrentThread();
#endif


上記のコードを見ると、Androidの下で追加の処理が必要なだけで、コアのコードは動かず、pthreadとstd::threadの処理は同じです.