3.x里面的事件派发是线程安全的嘛?
我看只是做了简单的变量标识,而这怎么看也不是线程安全的.
void EventDispatcher::removeEventListener(EventListener* listener)
{
…
auto removeListenerInVector = &](std::vector<EventListener*>* listeners){
if (listeners == nullptr)
return;
for (auto iter = listeners->begin(); iter != listeners->end(); ++iter)
{
.........
if (_inDispatch == 0)
{
listeners->erase(iter);
CC_SAFE_RELEASE(l);
}
isFound = true;
break;
}
}
};
…
}
void EventDispatcher::dispatchEvent(Event* event)
{
…
DispatchGuard guard(_inDispatch);
…
}
void EventDispatcher::addEventListener(EventListener* listener)
{
if (_inDispatch == 0)
{
forceAddEventListener(listener);
}
else
{
_toAddedListeners.push_back(listener);
}
listener->retain();
}