pthread使用实例

pthread使用实例,第1张

概述在cocos2d-x里面用多线程还是乖乖的用pthread吧。应用一启动时创建线程作为逻辑线程。 创建方法如下: extern ResourcePool logicThreadResource;void *test(void *param){ while (true) { if (logicThreadResource.peekNextDataLength()) {

在cocos2d-x里面用多线程还是乖乖的用pthread吧。应用一启动时创建线程作为逻辑线程。

创建方法如下:

extern ResourcePool logicThreadResource;voID *test(voID *param){    while (true) {        if (logicThreadResource.peekNextDataLength()) {            printf("有数据需要处理");            int datasize = 0;            char *receiveData = new char[512];            logicThreadResource.popData(receiveData,datasize,512);                        int sigal = *((int32_t *) receiveData);            printf("the sigal is %d\n",sigal);            if (sigal == 100) {                CalWinRate(receiveData+4);            }            delete[] receiveData;                    }else{            pthread_mutex_lock(&locklogicthread);            pthread_cond_wait(&cond,&locklogicthread);            pthread_mutex_unlock(&locklogicthread);        }    }        return NulL;}voID create_pthread(){    //    启动两个测试的主线程    pthread_t tID;    pthread_create(&tID,NulL,test,NulL);}
pthread_create原型为:PTW32_DLLPORT int PTW32_CDECL pthread_create(pthread_t *tID,const pthread_attr_t *attr,voID*(*start)(voID *),voID *arg)。create有四个参数,第一个是pthread_t,第二个是创建线程的参数,第三个是线程的入口函数,第四个为入口函数参数。这里需要注意的是设置pthread_cond_wait即唤醒函数的时候一定要加锁。启动函数如下:
bool ResourcePool::pushData(const char *data,int size){    autoReleaseLock myLock = autoReleaseLock();//    deal    int realSize = size + sizeof(int32_t);    int needMemory = bufferLength + realSize;    if (needMemory > bufferCapacity) {//        需要重新分配内存        if (reMollocmemory(needMemory)) {        }else{            return false;        }    }//    char *pWriteBuff = resPool + bufferLength;        *((int32_t *)pWriteBuff) = size;        pWriteBuff += sizeof(int32_t);    bufferLength += sizeof(int32_t);        memmove(pWriteBuff,data,size);    bufferLength += size;    //    缓冲区有数据的话就激活线程    pthread_cond_signal(&cond);        return true;}

思路还是采用的是我上篇博客的思路,至于cocos2d-x里面的调用我是这样的:
local handlerlocal scheduler = CCDirector:sharedDirector():getScheduler()handler = scheduler:scheduleScriptFunc(function()                                -- 每帧检测一下数据,看看是否是合理的                                BookUtils:parsePackagetoLua()                                if GLOABLEPACKAGE ~= "" then                                    -- 解析数据                                    local package = Json.decode(GLOABLEPACKAGE)                                    print("the GLOABLEPACKAGE is " .. GLOABLEPACKAGE)                                    GLOABLEPACKAGE = ""                                    local datatable = {}                                    table.walk(package,function(val,key)                                            if tonumber(key) ~= 1 then                                                datatable[#datatable+1] = val                                               end                                        end)                                                                        if tonumber(package[1]) == 100 then                                        -- 胜率计算器,更新胜率                                        CCNotificationCenter:sharednotificationCenter():postNotification("CAL_WIN_RATE_UPDATE",CCString:create(Json.encode(datatable)))                                    elseif tonumber(package[1]) == 101 then                                        -- 胜率计算完毕                                        CCNotificationCenter:sharednotificationCenter():postNotification("CAL_WIN_RATE_UPDATE_END")                                    end                                end                                                            end,false)
即主线程每一帧去检测缓冲区,如果有数据,则发送消息。 总结

以上是内存溢出为你收集整理的pthread使用实例全部内容,希望文章能够帮你解决pthread使用实例所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/1034960.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-24
下一篇 2022-05-24

发表评论

登录后才能评论

评论列表(0条)

保存