我的是Win32的项目来着。。。
主线程有个schedule从消息队列抓取消息,平时pause,有消息才唤醒
子线程往消息队列push消息,有消息唤醒主线程的schedule,这样就可以在主线程处理消息
用CCNotificationCenter应该也可以实现
多线程注意一定要用互斥量锁住队列,否则会悲剧
见 cpp-tests NotificationCenterTest
嗯嗯, 解决完毕,可以通知主线程了~
没有搜索到win下加线程锁的函数,所以我加了这些代码
不过消息发送的频率高了程序还是会崩掉。。。
// 发送消息
if (GetAsyncKeyState(VK_UP))
{
// 上
if (game->B == 1)
{
continue;
}
game->B = 1;
log("A");
//
auto i = Integer::create(__UP);
i->retain();
NotificationCenter::getInstance()->postNotification("up", i);
}
// 处理消息MoveBy *moveBy = MoveBy::create(0, v2);
U->runAction(moveBy);
msg->release();
B = 0;
log("B\n");
```
嗯嗯,找到那个东西了~
多谢啦!~
— Begin quote from ____
引用第3楼_云之彼端于2014-12-20 17:10发表的 回 1楼(flysec) 的帖子 :
嗯嗯, 解决完毕,可以通知主线程了~
没有搜索到win下加线程锁的函数,所以我加了这些代码
… http://www.cocoachina.com/bbs/job.php?action=topost&tid=277693&pid=1203051
— End quote
忘记告诉你可以参考2dx源码里的HttpClient
你可以搜一下源码
用c++11的std::mutex加锁
在线程里面调用create会悲剧的。因为它会autorelease,但是autorelease是非线程安全,会造成autoreleasepool容器崩溃(retain, release本身没有这个问题,是来自于autorelease),所以不要在子线程里进行autorelease
线程中Integer你要new出来
以后直接release即可