mirror of
https://github.com/HIllya51/LunaHook.git
synced 2024-12-29 14:44:10 +08:00
36 lines
578 B
C++
36 lines
578 B
C++
template <class T>
|
|
class lockedqueue
|
|
{
|
|
std::mutex lock;
|
|
std::queue<T> data;
|
|
HANDLE hsema;
|
|
|
|
public:
|
|
lockedqueue()
|
|
{
|
|
hsema = CreateSemaphore(NULL, 0, 65535, NULL);
|
|
}
|
|
~lockedqueue()
|
|
{
|
|
CloseHandle(hsema);
|
|
}
|
|
void push(T _)
|
|
{
|
|
std::lock_guard _l(lock);
|
|
data.push(std::move(_));
|
|
ReleaseSemaphore(hsema, 1, NULL);
|
|
}
|
|
T pop()
|
|
{
|
|
WaitForSingleObject(hsema, INFINITE);
|
|
std::lock_guard _l(lock);
|
|
auto _ = data.front();
|
|
data.pop();
|
|
return _;
|
|
}
|
|
bool empty()
|
|
{
|
|
std::lock_guard _l(lock);
|
|
return data.empty();
|
|
}
|
|
}; |