【求助】请问子线程完成一些任务之后如何通知主线程更新界面?

我的是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");





```

嗯嗯,找到那个东西了~
多谢啦!~

http://blog.csdn.net/morewindows/article/details/7470936,1

— 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即可

notificationcenter也不是线程安全,所以还是要自己做队列
参考
http://www.tuicool.com/articles/IR7V32 的回答