Initial Commit
This commit is contained in:
commit
3323a8bdb5
88
WinUtil.cpp
Normal file
88
WinUtil.cpp
Normal file
|
@ -0,0 +1,88 @@
|
||||||
|
#include "WinUtil.h"
|
||||||
|
using namespace std;
|
||||||
|
|
||||||
|
SharedMemory::SharedMemory(const string& name)
|
||||||
|
{
|
||||||
|
hMap=OpenFileMapping(FILE_MAP_ALL_ACCESS,FALSE,name.c_str());
|
||||||
|
if(hMap!=NULL) pMem=MapViewOfFile(hMap,FILE_MAP_ALL_ACCESS,0,0,0);
|
||||||
|
else pMem=nullptr;
|
||||||
|
}
|
||||||
|
|
||||||
|
SharedMemory::SharedMemory(const string& name,int size)
|
||||||
|
{
|
||||||
|
hMap=CreateFileMapping(INVALID_HANDLE_VALUE,NULL,PAGE_READWRITE,0,size,name.c_str());
|
||||||
|
if(hMap!=NULL) pMem=MapViewOfFile(hMap,FILE_MAP_ALL_ACCESS,0,0,0);
|
||||||
|
else pMem=nullptr;
|
||||||
|
}
|
||||||
|
|
||||||
|
SharedMemory::~SharedMemory()
|
||||||
|
{
|
||||||
|
if(pMem)
|
||||||
|
{
|
||||||
|
UnmapViewOfFile(pMem);
|
||||||
|
}
|
||||||
|
if(hMap!=NULL)
|
||||||
|
{
|
||||||
|
CloseHandle(hMap);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
bool SharedMemory::isReady() const
|
||||||
|
{
|
||||||
|
return (hMap!=NULL);
|
||||||
|
}
|
||||||
|
|
||||||
|
void* SharedMemory::get()
|
||||||
|
{
|
||||||
|
return pMem;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
NamedMutex::NamedMutex(const string& name, bool create)
|
||||||
|
{
|
||||||
|
if(create)
|
||||||
|
{
|
||||||
|
hmtx=CreateMutex(NULL,TRUE,name.c_str());
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
hmtx=OpenMutex(MUTEX_ALL_ACCESS,FALSE,name.c_str());
|
||||||
|
}
|
||||||
|
if(hmtx==NULL)
|
||||||
|
{
|
||||||
|
errcode=GetLastError();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
NamedMutex::~NamedMutex()
|
||||||
|
{
|
||||||
|
if(hmtx!=NULL)
|
||||||
|
{
|
||||||
|
CloseHandle(hmtx);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
bool NamedMutex::isReady() const
|
||||||
|
{
|
||||||
|
return (hmtx!=NULL);
|
||||||
|
}
|
||||||
|
|
||||||
|
DWORD NamedMutex::getError() const
|
||||||
|
{
|
||||||
|
return errcode;
|
||||||
|
}
|
||||||
|
|
||||||
|
void NamedMutex::wait()
|
||||||
|
{
|
||||||
|
WaitForSingleObject(hmtx,INFINITE);
|
||||||
|
}
|
||||||
|
|
||||||
|
void NamedMutex::wait_for(int ms)
|
||||||
|
{
|
||||||
|
WaitForSingleObject(hmtx,ms);
|
||||||
|
}
|
||||||
|
|
||||||
|
void NamedMutex::release()
|
||||||
|
{
|
||||||
|
ReleaseMutex(hmtx);
|
||||||
|
}
|
38
WinUtil.h
Normal file
38
WinUtil.h
Normal file
|
@ -0,0 +1,38 @@
|
||||||
|
#include <string>
|
||||||
|
#include <windows.h>
|
||||||
|
|
||||||
|
class SharedMemory
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
/// Open a shared memory
|
||||||
|
SharedMemory(const std::string& name);
|
||||||
|
/// Create a shared memory
|
||||||
|
SharedMemory(const std::string& name,int size);
|
||||||
|
/// auto close, destroy memory.
|
||||||
|
~SharedMemory();
|
||||||
|
|
||||||
|
bool isReady() const;
|
||||||
|
void* get();
|
||||||
|
|
||||||
|
private:
|
||||||
|
HANDLE hMap;
|
||||||
|
void* pMem;
|
||||||
|
};
|
||||||
|
|
||||||
|
class NamedMutex
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
NamedMutex(const std::string& name,bool create=false);
|
||||||
|
~NamedMutex();
|
||||||
|
|
||||||
|
bool isReady() const;
|
||||||
|
DWORD getError() const;
|
||||||
|
|
||||||
|
/// If the mutex has been occupied by this process, wait() will return immediately.
|
||||||
|
void wait();
|
||||||
|
void wait_for(int ms);
|
||||||
|
void release();
|
||||||
|
private:
|
||||||
|
HANDLE hmtx;
|
||||||
|
DWORD errcode;
|
||||||
|
};
|
Loading…
Reference in New Issue
Block a user