#pragma once
#include "net_common.h"
//using namespace std;
namespace olc
{
namespace net
{
template<typename T>
class tsqueue
{
public:
tsqueue() = default;
tsqueue(const tsqueue<T>&) = delete;
virtual ~tsqueue() { clear(); }
public:
// Returns and maintains item at front of Queue
const T& front()
{
scoped_lock lock(muxQueue);
return deqQueue.front();
}
// Returns and maintains item at back of Queue
const T& back()
{
scoped_lock lock(muxQueue);
return deqQueue.back();
}
// Removes and returns item from front of Queue
T pop_front()
{
scoped_lock lock(muxQueue);
auto t = move(deqQueue.front());
deqQueue.pop_front();
return t;
}
// Removes and returns item from back of Queue
T pop_back()
{
scoped_lock lock(muxQueue);
auto t = move(deqQueue.back());
deqQueue.pop_back();
return t;
}
// Adds an item to back of Queue
void push_back(const T& item)
{
scoped_lock lock(muxQueue);
deqQueue.emplace_back( move(item));
unique_lock< mutex> ul(muxBlocking);
cvBlocking.notify_one();
}
// Adds an item to front of Queue
void push_front(const T& item)
{
scoped_lock lock(muxQueue);
deqQueue.emplace_front( move(item));
unique_lock< mutex> ul(muxBlocking);
cvBlocking.notify_one();
}
// Returns true if Queue has no items
bool empty()
{
scoped_lock lock(muxQueue);
return deqQueue.empty();
}
// Returns number of items in Queue
size_t count()
{
scoped_lock lock(muxQueue);
return deqQueue.size();
}
// Clears Queue
void clear()
{
scoped_lock lock(muxQueue);
deqQueue.clear();
}
void wait()
{
while (empty())
{
unique_lock< mutex> ul(muxBlocking);
cvBlocking.wait(ul);
}
}
protected:
mutex muxQueue;
deque<T> deqQueue;
condition_variable cvBlocking;
mutex muxBlocking;
};
}
}
我尝试了我发现的所有方法,但没有任何幸福的结局,现在我只学习C++,所以我的经验很低。这个项目是MMO客户端/服务器。我通过 youtube 上的视频课程进行编码,所以...在视频中一切都工作得很好,但我遇到了这个问题,在修复它之前无法继续学习。请帮助我,或者如果您有任何问题和时间,如果您能给我一些时间,我将非常感激!
一旦我重新引入您删除并初始化模板的
using namespace std;
,代码就可以正常编译:
https://godbolt.org/z/j4Y688jxq
看起来当您删除
using namespace std;
时,您忘记在来自 std::
的所有内容之前添加 namespace std
。继续这样做,你就会很顺利。