mirror of
https://github.com/UOX3DevTeam/UOX3
synced 2026-08-13 12:27:04 -04:00
54 lines
1.8 KiB
C++
54 lines
1.8 KiB
C++
#include "cThreadQueue.h"
|
|
#include <algorithm>
|
|
|
|
CThreadQueue messageLoop;
|
|
|
|
//=============================================================
|
|
auto CThreadQueue::operator<<( MessageType newMessage )->CThreadQueue & {
|
|
NewMessage( newMessage, "" );
|
|
return (*this);
|
|
}
|
|
//=============================================================
|
|
auto CThreadQueue::operator <<( char *toPush ) ->CThreadQueue & {
|
|
NewMessage( MSG_PRINT, toPush );
|
|
return (*this);
|
|
}
|
|
//=============================================================
|
|
auto CThreadQueue::operator <<( const char *toPush )->CThreadQueue & {
|
|
NewMessage( MSG_PRINT, toPush );
|
|
return ( *this );
|
|
}
|
|
//=============================================================
|
|
auto CThreadQueue::operator <<( const std::string& toPush )->CThreadQueue & {
|
|
NewMessage( MSG_PRINT, toPush.c_str() );
|
|
return ( *this );
|
|
}
|
|
//=============================================================
|
|
auto CThreadQueue::Empty()->bool {
|
|
std::scoped_lock lock(queuelock);
|
|
bool retVal = internalQueue.empty();
|
|
return retVal;
|
|
}
|
|
//=============================================================
|
|
auto CThreadQueue::GrabMessage()->MessagePassed {
|
|
std::scoped_lock lock(queuelock);
|
|
MessagePassed toReturn = internalQueue.front();
|
|
internalQueue.pop();
|
|
|
|
return toReturn;
|
|
}
|
|
//=============================================================
|
|
auto CThreadQueue::NewMessage( MessageType toAdd, const std::string& data )->void{
|
|
MessagePassed adding;
|
|
adding.actualMessage = toAdd;
|
|
adding.data = data ;
|
|
std::scoped_lock lock(queuelock);
|
|
internalQueue.push( adding );
|
|
}
|
|
//=============================================================
|
|
auto CThreadQueue::bulkData() ->std::queue<MessagePassed> {
|
|
std::queue<MessagePassed> returnQueue;
|
|
std::scoped_lock lock(queuelock);
|
|
std::swap(returnQueue,internalQueue) ;
|
|
return returnQueue;
|
|
}
|