添加链接
link管理
链接快照平台
  • 输入网页链接,自动生成快照
  • 标签化管理网页链接
相关文章推荐
温暖的鸵鸟  ·  GDB调试 · Golang 学习笔记·  4 天前    · 
坏坏的春卷  ·  配置 AD FS Extranet ...·  2 月前    · 
另类的木瓜  ·  Getting Disk Info - ...·  3 月前    · 
phoenixdown:

原来的代码取得size后,就unlock了,在进入while前就可能在别的线程里g_quene的的size发生变化,比如变成0了进入while后就会报错了

但是在使用g_queue前有再次获取锁啊。不过你的做法是使得逻辑更清晰一些。

phoenixdown:

然后今天断点又不好使了,但是不会C++那边不会报错了

有报什么问题吗?

@minggo

断点不好使的问题找到了, 是我为了区分app和h5版本的main.js改了man.js的名字造成的,
cocos-debug的cocosFXDebug.js 里main.js的名字是固定的,
我在launch.json里加了个定义main名字的属性,算是解决了这个问题

C++端的那个g_quene的问题还是确实存在的。我按我的方法改了就没有问题了

phoenixdown:

断点不好使的问题找到了, 是我为了区分app和h5版本的main.js改了man.js的名字造成的,cocos-debug的cocosFXDebug.js 里main.js的名字是固定的,我在launch.json里加了个定义main名字的属性,算是解决了这个问题

是的,目前只有 main.js 能够唯一定义路径问题。

void ScriptingCore::debugProcessInput(const std::string& str) JSAutoCompartment ac(_cx, _debugGlobal.ref()); JSString* jsstr = JS_NewStringCopyZ(_cx, str.c_str()); jsval argv = STRING_TO_JSVAL(jsstr); JS::RootedValue outval(_cx); JS::RootedObject debugGlobal(_cx, _debugGlobal.ref()); JS_CallFunctionName(_cx, debugGlobal, "processInput", JS::HandleValueArray::fromMarkedLocation(1, &argv), &outval); static bool NS_ProcessNextEvent() //g_qMutex.lock(); //size_t size = g_queue.size(); //g_qMutex.unlock(); while (true) std::string str = ""; g_qMutex.lock(); size_t size = g_queue.size(); if (size > 0) auto first = g_queue.begin(); str = *first; g_queue.erase(first); size = g_queue.size(); g_qMutex.unlock(); if (str.length() > 0) ScriptingCore::getInstance()->debugProcessInput(str); if (size <= 0) break; // std::this_thread::yield(); std::this_thread::sleep_for(std::chrono::milliseconds(10)); return true;

就这两个函数,你们自己改吧

g_qMutex.lock();
messageCount = g_queue.size(); // if messageCount == 1
if (messageCount > 0)
auto first = g_queue.begin();
message = *first; // get a message
g_queue.erase(first);
–messageCount; // messageCount = 0
g_qMutex.unlock();

    if (messageCount == 0)    // messageCount is 0 break
        break;
    if (!message.empty())      // message 还未处理
        ScriptingCore::getInstance()->debugProcessInput(message);