void GxsCommentTreeWidget::loadRequest(const TokenQueue *queue, const TokenRequest &req) { std::cerr << "GxsCommentTreeWidget::loadRequest() UserType: " << req.mUserType; std::cerr << std::endl; if (queue != mTokenQueue) { std::cerr << "GxsCommentTreeWidget::loadRequest() Queue ERROR"; std::cerr << std::endl; return; } /* now switch on req */ switch(req.mType) { case TOKENREQ_MSGINFO: { switch(req.mAnsType) { case RS_TOKREQ_ANSTYPE_ACK: if (req.mUserType == COMMENT_VOTE_ACK) { acknowledgeVote(req.mToken); } else { acknowledgeComment(req.mToken); } break; case RS_TOKREQ_ANSTYPE_DATA: loadThread(req.mToken); break; } } break; default: std::cerr << "GxsCommentTreeWidget::loadRequest() UNKNOWN UserType "; std::cerr << std::endl; break; } }
void loadAllResourcesAsyc(const std::vector<std::string>& resources, const std::function<void(size_t)>& callback) { if (resources.size() == 0) { callback(0); return; } struct __Args* args = new __Args(); std::copy(resources.begin(), resources.end(), std::back_inserter(args->resources)); args->callback = callback; args->size_res = args->resources.size(); args->size_textures = 0; /*将pvr或png分离出来单独加载*/ args->bound = std::partition(args->resources.begin(), args->resources.end(), [args](/*typename _ResArr::value_type&*/std::string& value)->bool{ if(value.find("pvr")!=-1 || value.find("png")!=-1){ ++args->size_textures; return true; } else return false; }); /*等纹理加载完毕,再加载其他资源 另外再开一个线程加载*/ std::thread loadThread(&_asyncLoadThreadFunc, args); loadThread.detach(); /*因为必须在主线程将纹理加载进入显存,所以可以用cocos2d-x异步加载函数*/ auto textureCache = cocos2d::Director::getInstance()->getTextureCache(); for (auto it=args->resources.begin(); it!=args->bound; ++it) { cocos2d::log("load texture image: %s",it->c_str()); textureCache->addImageAsync(*it, [args](cocos2d::Texture2D *){ args->callback(--args->size_res); --args->size_textures; if (args->size_textures == 0) { args->cv.notify_one(); } if (args->size_res == 0) { delete args; } }); } }
void StreamService::operator()() { Thread loadThread("Loader"); loadThread.startThread(std::ref(loader)); currentBuffer = &streamBufferA; UInt32 bufferOffset = 0; loader.ReadyForData(); InitialDataMove(bufferOffset); StartProcessing(); while (IsStreaming()) { coordCV.wait(lock); StreamBuffer* currBuff = GetActiveBuffer(); musicRef->PushData(currBuff, ByteSubmissionAmount, bufferOffset); bufferOffset += ByteSubmissionAmount; if (bufferOffset >= currBuff->numBytesInBuffer) { if (LastBuffer) { musicRef->StopProcessing(); SetStreaming(FALSE); } currBuff->hasData = FALSE; SwapActiveBuffer(); bufferOffset = 0; loader.ReadyForData(); } } loadThread.join(); streamer->StreamEnded(this); }