Cocos2dx 3.x Androidでのマルチスレッドロードの問題(thread exiting,not yet detached)
cococos 2 dxのアップグレードに伴い、3.0バージョンからpthreadを廃止し、C++11で新しく加入したstd::threadに変更し、個人的には後者の方が使いやすいと感じました.
タイトルに記載されているような問題はpthreadとstd::threadで発生します.具体的な原因はここでは詳しく説明しません.接続中のブログを参照してください.
Cocos 2 d-x 3.0マルチスレッド非同期リソースロード
ここではstd::threadの場合の骨の折れるルーチンのみを貼り付けます.
JNIはAndroidでしか使えないので、プラットフォームの区分処理が欠かせません
ヘッダファイルには次のものが含まれます.
コード処理:
上記のコードを見ると、Androidの下で追加の処理が必要なだけで、コアのコードは動かず、pthreadと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の処理は同じです.