gpt4 book ai didi

c++ - 重写一个类以使其更通用以实现可移植性

转载 作者:行者123 更新时间:2023-11-28 01:38:02 25 4
gpt4 key购买 nike

我之前问过这个问题Removing Windows library dependencies关于删除 Windows 库依赖项。用户:https://stackoverflow.com/users/214671/matteo-italia已经解释过Threads您可以用 std::mutex 替换 Windows 特定代码但至于Processes目前标准中没有任何内容是我接受的答案。

在另一个好的回答用户:https://stackoverflow.com/users/7594711/soronelhaetir建议使用 boost-interprocess .但是我当前的项目是 boost免费。

当前类:

block 处理:

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);
}

} // namespace demo

我的问题仍然部分相同:removing windows dependencies但现在变成了:有没有一种方法可以用通用的方式重写这个类,这样我就不必使用:#include <Windows.h>同时不使用任何第三方库,例如 boost

最佳答案

不幸的是,当前的 C++ 标准库并没有提供太多 IPC 方式,也不包含任何命名互斥锁支持。 (它提供了 shared_mutex,但那是另一回事。)因此,您陷入了外部依赖性。该外部依赖项可以是您已经完成的 Windows API,也可以是 Boost(提供 named_mutex )或其他东西。

我完全理解您不愿意引入对 Boost 的依赖。但是,如果您尝试自己处理这个问题并开始添加替代平台支持,您很快就会发现您只是在重新发明 Boost 库,而且几乎肯定做得不好。因此,在这种情况下,您应该权衡您对可移植性的要求和您对硬着头皮使用 Boost 的厌恶。

关于c++ - 重写一个类以使其更通用以实现可移植性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48450779/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com