删除 Windows 库依赖项
Removing Windows library dependencies
我这里有几个类,出于可移植性的原因,我想删除窗口库依赖项。一个用于阻塞进程,另一个用于阻塞线程。这两个类都可以按原样编译并运行良好...... 至于BlockProcess
类,它目前使用互斥锁的HANDLE
并使用函数调用,例如:{CreateMutex()
,CloseHandle()
&GetLastError()
}。至于BlockThread
类,它使用指向CRITICAL_SECTION
调用函数的指针,例如:{EnterCricticalSection()
&LeaveCriticalSection()
}。
我想知道的是,是否有一种等效的方法可以使用std
库中的某些内容来执行此操作,例如std::mutex
,std::thread
等,它将提供相同的功能。我想消除对#include<windows.h>
和可能#include<process.h>
的需求。
以下是我现有的课程:
BlockProcess.h
#ifndef BLOCK_PROCESS_H
#define BLOCK_PROCESS_H
#include <Windows.h>
#include <process.h>
#include <string>
namespace demo {
class BlockProcess final {
private:
HANDLE hMutex_;
public:
explicit BlockProcess( const std::string& strName );
~BlockProcess();
bool isBlocked() const;
BlockProcess( const BlockProcess& c ) = delete;
BlockProcess& operator=( const BlockProcess& c ) = delete;
};
} // namespace demo
#endif // !BLOCK_PROCESS_H
BlockProcess.cpp
#include "BlockProcess.h"
namespace demo {
BlockProcess::BlockProcess( const std::string& strName ) {
hMutex_ = CreateMutex( nullptr, FALSE, strName.c_str() );
}
BlockProcess::~BlockProcess() {
CloseHandle( hMutex_ );
}
bool BlockProcess::isBlocked() const {
return (hMutex_ == nullptr || GetLastError() == ERROR_ALREADY_EXISTS);
}
BlockThread.h
#ifndef BLOCK_THREAD_H
#define BLOCK_THREAD_H
#include <Windows.h>
namespace demo {
class BlockThread final {
private:
CRITICAL_SECTION* pCriticalSection_;
public:
explicit BlockThread( CRITICAL_SECTION& criticalSection );
~BlockThread();
BlockThread( const BlockThread& c ) = delete;
BlockThread& operator=( const BlockThread& c ) = delete;
};
} // namespace demo
#endif // !BLOCK_THREAD_H
} // namespace demo
BlockThread.cpp
#include "BlockThread.h"
namespace demo {
BlockThread::BlockThread( CRITICAL_SECTION& criticalSection ) {
pCriticalSection_ = &criticalSection;
EnterCriticalSection( pCriticalSection_ );
}
BlockThread::~BlockThread() {
LeaveCriticalSection( pCriticalSection_ );
}
} // namespace demo
编辑
如果您需要如何使用这些类的示例,请随时发表评论。
您的BlockThread
本质上是std::lock_guard
的(用于std::mutex
而不是CRITICAL_SECTION
)。它可以简单地替换为标准库代码。
至于BlockProcess
(创建跨进程同步对象),没有标准的等效项。
boost interprocess 确实提供了跨平台的进程间同步对象(类似于标准库的线程间对象)。但标准库类型纯粹是进程中的。
相关文章:
- 如何从C++中的依赖类型中获得它所依赖的类型
- 在 Windows 上,是否可以让 dll 在不使用 PATH 环境变量的情况下在另一个文件夹中查找依赖项?
- 如何编写无依赖的Windows程序?
- C++ Windows 通知:使用依赖模板名称
- 删除 Windows 库依赖项
- Windows 10 UWP桌面桥应用程序(C ):调试构建中的VCLIBS依赖关系
- 用c++或Windows中的c#程序列出头文件或依赖项
- 如何编译具有"wlanapi.h"和"windows.h"依赖项C++代码
- Windows上的CMake-zlib依赖关系错误
- 如何使用 CMake 获取 Windows 应用程序的依赖项,同时从 Linux 构建它
- 令人费解的Boost.Python 1.54(调试版本)对Windows上的Python27.lib的依赖关系
- windows上的boost.asio错误代码依赖于平台
- Windows上与Mingw的DLL依赖关系
- 依赖于Windows句柄的类型是否为指针
- 从Windows二进制文件中删除msvcp90d.dll依赖
- Windows运行时库依赖和纯C代码
- 用于Windows的可移植C/ c++应用程序的DLL依赖
- 编译程序依赖于<windows.h>而不使用Visual Studio
- Mingw依赖于非windows本机DLL
- 如果DLL将在多个平台上使用,那么在编码中使用windows依赖项是否安全?