I have a priority queue, as demonstrated below:
Code:
#include <iostream>
#include <queue>
#include <string>
#include <windows.h>
class Message
{
public:
std::string text;
int priority;
friend bool operator < (Message firstmsg, Message secondmsg);
};
bool operator < (Message firstmsg, Message secondmsg)
{
if(firstmsg.priority<secondmsg.priority)
{ return true; }else{ return false; }
}
void Send(std::string);
class Message_Queue
{
public:
friend DWORD WINAPI Send_Priority_Queue(LPVOID param);
void Add_Queue(std::string text, int priority);
protected:
std::priority_queue<Message> MessageQueue;
};
void Message_Queue::Add_Queue(std::string text, int priority)
{
Message message;
message.text=text;
message.priority=priority;
MessageQueue.push(message);
std::cout << "Queue Added: " << text << std::endl;
}
void Send(std::string text)
{
std::cout << "Queue Dumped: " << text << std::endl;
}
//Yes Global variables are naughty however im in a hurry
Message_Queue messages;
int main()
{
std::cout << "Use CTRL+C To Break." << std::endl;
int tempint = 0;
std::string tempstr;
DWORD ThreadID=0;
CreateThread(NULL, 0, Send_Priority_Queue, NULL, 0, &ThreadID);
while (1)
{
std::cin >> tempstr;
// std::cin >> tempint;
messages.Add_Queue(tempstr,tempint);
}
return 1;
}
DWORD WINAPI Send_Priority_Queue(LPVOID user)
{
while(1)
{
if (!messages.MessageQueue.empty())
{
Send(messages.MessageQueue.top().text);
messages.MessageQueue.pop();
Sleep(5000);
}
}
return 0;
}
What i want to know is if i have 3 threads running that are all using Add_Queue(std::string text, int priority); to add messages to the queue, is it thread safe? Will i need to use a mutex or something to prevent crashes? Id like to hear any ideas you guys might have, and possible quick solutions to it.
Thanks for your time.
.