标签:android des style http java color
- // AppDelegate.cpp
- bool AppDelegate::applicationDidFinishLaunching() {
- … …
- FlashScene* scene = FlashScene::create();
- pDirector->runWithScene(scene);
- return true;
- }
- //FlashScene.h
- struct ResourceLoadIndicator {
- pthread_mutex_t mutex;
- bool load_done;
- void *context;
- };
- class FlashScene : public Scene
- {
- public:
- FlashScene(void);
- ~FlashScene(void);
- virtual bool init();
- CREATE_FUNC(FlashScene);
- bool getResourceLoadIndicator();
- void setResourceLoadIndicator(bool flag);
- private:
- void updateScene(float dt);
- private:
- ResourceLoadIndicator rli;
- };
- // FlashScene.cpp
- bool FlashScene::init()
- {
- bool bRet = false;
- do {
- CC_BREAK_IF(!CCScene::init());
- Size winSize = Director::getInstance()->getWinSize();
- //FlashScene自己的资源只能同步加载了
- Sprite *bg = Sprite::create("FlashSceenBg.png");
- CC_BREAK_IF(!bg);
- bg->setPosition(ccp(winSize.width/2, winSize.height/2));
- this->addChild(bg, 0);
- this->schedule(schedule_selector(FlashScene::updateScene)
- , 0.01f);
- //start the resource loading thread
- rli.load_done = false;
- rli.context = (void*)this;
- pthread_mutex_init(&rli.mutex, NULL);
- pthread_attr_t attr;
- pthread_attr_init(&attr);
- pthread_attr_setdetachstate(&attr, PTHREAD_CREATE_DETACHED);
- pthread_t thread;
- pthread_create(&thread, &attr,
- resource_load_thread_entry, &rli);
- bRet=true;
- } while(0);
- return bRet;
- }
- static void* resource_load_thread_entry(void* param)
- {
- AppDelegate *app = (AppDelegate*)Application::getInstance();
- ResourceLoadIndicator *rli = (ResourceLoadIndicator*)param;
- FlashScene *scene = (FlashScene*)rli->context;
- //load music effect resource
- … …
- //init from config files
- … …
- //load images data in worker thread
- SpriteFrameCache::getInstance()->addSpriteFramesWithFile(
- "All-Sprites.plist");
- … …
- //set loading done
- scene->setResourceLoadIndicator(true);
- return NULL;
- }
- bool FlashScene::getResourceLoadIndicator()
- {
- bool flag;
- pthread_mutex_lock(&rli.mutex);
- flag = rli.load_done;
- pthread_mutex_unlock(&rli.mutex);
- return flag;
- }
- void FlashScene::setResourceLoadIndicator(bool flag)
- {
- pthread_mutex_lock(&rli.mutex);
- rli.load_done = flag;
- pthread_mutex_unlock(&rli.mutex);
- return;
- }
- void FlashScene::updateScene(float dt)
- {
- if (getResourceLoadIndicator()) {
- Director::getInstance()->replaceScene(
- WelcomeScene::create());
- }
- }
- threadid=24: thread exiting, not yet detached (count=0)
- threadid=24: thread exiting, not yet detached (count=1)
- threadid=24: native thread exited without detaching
- pthread_attr_setdetachstate(&attr, PTHREAD_CREATE_DETACHED);
All threads are Linux threads, scheduled by the kernel. They‘re usually started from managed code (using Thread.start), but they can also be created elsewhere and then attached to the JavaVM. For example, a thread started with pthread_create can be attached with the JNI AttachCurrentThread or AttachCurrentThreadAsDaemon functions. Until a thread is attached, it has no JNIEnv, and cannot make JNI calls. |
- #if (CC_TARGET_PLATFORM == CC_PLATFORM_ANDROID)
- #include "platform/android/jni/JniHelper.h"
- #include <jni.h>
- #endif
- static void* resource_load_thread_entry(void* param)
- {
- … …
- 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);
- … …
- //Your Jni Calls
- … …
- vm->DetachCurrentThread();
- … …
- return NULL;
- }
The JavaVM provides the "invocation interface" functions, which allow you to create and destroy a
JavaVM. In theory you can have multiple JavaVMs per process, but Android only allows one.
The JNIEnv provides most of the JNI functions. Your native functions all receive a JNIEnv as the first argument.
The JNIEnv is used for thread-local storage. For this reason, you cannot share a JNIEnv between threads.
|
- SpriteFrameCache::getInstance()->addSpriteFramesWithFile("All-Sprites.plist");
- libEGL: call to OpenGL ES API with no current context (logged once per thread)
- static void* resource_load_thread_entry(void* param)
- {
- … …
- allSpritesImage = new Image();
- allSpritesImage->initWithImageFile("All-Sprites.png");
- … …
- }
- void FlashScene::updateScene(float dt)
- {
- if (getResourceLoadIndicator()) {
- // construct texture with preloaded images
- Texture2D *allSpritesTexture = TextureCache::getInstance()->
- addImage(allSpritesImage, "All-Sprites.png");
- allSpritesImage->release();
- SpriteFrameCache::getInstance()->addSpriteFramesWithFile(
- "All-Sprites.plist", allSpritesTexture);
- Director::getInstance()->replaceScene(WelcomeScene::create());
- }
- }
Cocos2d-x 3.0多线程异步资源加载,布布扣,bubuko.com
标签:android des style http java color
原文地址:http://blog.csdn.net/ecaifu800/article/details/38069209