int CMsgQueue::send_message(CMsg *newmsg, SDL_sem *sem) { SDL_LockMutex(m_msg_queue_mutex); if (m_msg_queue == NULL) { m_msg_queue = newmsg; } else { CMsg *p = m_msg_queue; while (p->get_next() != NULL) p = p->get_next(); p->set_next(newmsg); } SDL_UnlockMutex(m_msg_queue_mutex); if (sem != NULL) { SDL_SemPost(sem); } return (0); }
CMsg *CMsgQueue::get_message (void) { CMsg *ret; if (m_msg_queue == NULL) return(NULL); SDL_LockMutex(m_msg_queue_mutex); if (m_msg_queue == NULL) ret = NULL; else { ret = m_msg_queue; m_msg_queue = ret->get_next(); } SDL_UnlockMutex(m_msg_queue_mutex); if (ret) { ret->set_next(NULL); } return (ret); }