首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >重写类,使其更具有可移植性。

重写类,使其更具有可移植性。
EN

Stack Overflow用户
提问于 2018-01-25 19:48:47
回答 1查看 54关注 0票数 0

我以前曾问过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

对于当前的类:

BlockProcess:

BlockProcess.h

代码语言:javascript
复制
#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

代码语言:javascript
复制
#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 )

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-01-25 19:58:08

不幸的是,当前的C++标准库并没有以IPC的方式提供太多,也不包括任何命名的互斥对象支持。(它提供了shared_mutex,但这是另一回事。)因此,您将陷入外部依赖关系。这种外部依赖可以像您所做的那样是Windows,或者Boost (它提供了一个named_mutex),或者其他的东西。

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

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/48450779

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档