Schwarz counter (aka Nifty counter)イディオムをthread_local
と使用できますか?C++ Schwarzカウンタwith thread_local
class ThisThread{
JNIEnv* jni_env{nullptr};
public:
JNIEnv* getEnv(){
if (!jni_env){
// Attach thread
java_vm->GetEnv((void**)&jni_env, JNI_VERSION);
java_vm->AttachCurrentThread(&jni_env, NULL);
}
return jni_env;
}
~ThisThread(){
if (!jni_env) return;
// Deattach thread
java_vm->DetachCurrentThread();
}
};
static thread_local ThisThread this_thread;
が最初に構築されるためには、各スレッドの最後の破壊:
を(私はthread_local
ですべてstatic
を置き換えると仮定)私は、この(JavaのJNIスレッドのヘルパー)が必要です。 他のstaticまたはthread_localオブジェクトのデストラクタ/コンストラクタからthis_thread->getEnv()
を呼び出すことがあります。
UPDATE
https://stackoverflow.com/a/30200992 - ここでは、標準ではthread_localデストラクタは、静的前に呼び出さことを言うと、私は後になるこのいずれかが必要。
thisThreadへの参照もthread_localにする必要があります。 –
@RichardHodgesどういう意味ですか? – tower120
秒、デモをノックします –