小编Man*_*d3r的帖子

处理套接字描述符,如文件描述符(fstream)?C++/Linux的

偶然我发现我可以在套接字描述符上使用读写.我可以以某种方式(ab)使用fstream机制将数据输出到套接字描述符中吗?

c++ sockets linux stream

6
推荐指数
1
解决办法
3665
查看次数

苹果外部配件(蓝牙)仅适用于MFI设备?

我的学士论文的目标是通过蓝牙适配器将视光器件连接到iPad.目前我正在努力应对苹果限制.我经常在网上阅读,我可以使用支持的配置文件连接到至少支持这些配置文件的任何设备.但Apples技术常见问题解答指出,"外部附件框架旨在允许iOS应用程序仅与Apple的MFi许可证程序下开发的硬件附件进行通信".我不认为那些在这里写作的人只是为了好玩而撒谎.

任何人都可以告诉我,如果它的工作与否,可以告诉我,这就是非MFi配件的重点吗?

bluetooth external-accessory ios

6
推荐指数
2
解决办法
7692
查看次数

如何在多线程应用程序中使用 pybind11

我想在工作线程中运行 Python。但是,我在工作池中遇到了奇怪的段错误和线程死锁。如何正确使用 pybind11/Python C API 来允许线程运行作业?

我知道由于 GIL,它对 MT python 没有多大意义,但这是适应当前架构的中间解决方案,直到有更好的方法。

c++ python multithreading pybind11

6
推荐指数
2
解决办法
3557
查看次数

多线程.我是否需要关键部分才能进行只读访问?

我有一堆线程.他们应该访问包含配置数据的单例,该数据在创建单例时初始化一次.因此在第一次访问.因此,对单身人士的进一步行动只是只读的.在这种情况下,我是否需要关键部分?

c++ multithreading shared-memory critical-section

5
推荐指数
1
解决办法
1040
查看次数

通过 unix 信号优雅地终止 Qt 应用程序

我在我的应用程序中保存设置时遇到问题。这是在相关对象的析构函数中完成的。它是一个启动器,通过关闭终止是标准情况。应用程序实际保存设置的唯一方法是手动关闭它或关闭会话(至少在肉桂上,我猜这只会关闭所有窗口)。甚至sudo reboot可以防止 Qt 应用程序展开堆栈上的对象。终止killall -s <signal> <app>SIGINT,SIGKILL和具有相同的效果SIGTERM。如何强制我的 qt 应用程序优雅地终止于 on SIGTERMaboutToQuit也不会发出。

c++ qt signals terminate

5
推荐指数
1
解决办法
4315
查看次数

5
推荐指数
1
解决办法
2041
查看次数

如何在Qt中使用所有小数打印double?

首先,这不是重复的。我在网上搜索,但没有足够的答案。

我想打印双份。所以我必须将它转换为 QString。我想没有科学记数法,0.1 应该打印 0.1 和 1/3 应该打印尽可能多的 0.33333...因为 double 能够表示。不幸的是,我只能找到具有固定精度的解决方案,这会导致上限为 0.333333(在指定的 p 失去精度后结束)或不必要的零填充 0.100000。

我知道我可以最大化精度并删除所有尾随零,但是没有一个很好的解决方案,它只打印最大可能但最小必要的精度?

编辑:我想我需要澄清一些事情。这个问题不是要将实数空间映射到单、双或任何精度的浮点数。它是关于逆的:64 位双精度浮点空间到我们心爱的现实世界实数的映射。由于前者是后者的一个子集,理论上,这样做绝对没有问题。

c++ precision double qt

5
推荐指数
1
解决办法
8432
查看次数

如何在库之间传递对象和调用成员函数?

当我将核心应用程序的类文件包含在库的编译(Qt-Plugin)中时,我试图理解会发生什么.假设我有一个插件 - 一个处理程序 - 和一个Query(h,cpp)(带有私有实现) - 要处理的对象.

编辑

query.h(来自链接)

class Query final
{
public:
    friend class ExtensionManager;

    Query(const QString &term);
    ~Query();
    void addMatch(shared_ptr<AlbertItem> item, short score = 0);
    void reset();
    void setValid(bool b = true);
    bool isValid();
private:
    QueryPrivate *impl;
};
Run Code Online (Sandbox Code Playgroud)

我假设编译器,至少在链接阶段,获取目标文件并将其放入共享对象文件中.但实际上名称查询没有出现在cmake编译和链接过程的输出中(实际上是执行的g ++命令),只是它的目录的包含.

当我编译插件/库时,编译器/链接器除了检查接口/头之外还做了什么吗?插件如何在运行时了解有关Query的任何信息?插入调用如何在运行时对对象起作用?

c++ qt gcc

5
推荐指数
1
解决办法
888
查看次数

ZeroMQ是否允许多个服务器套接字?

本机C套接字API在accept()新的套接字描述符上返回,该描述符绑定到某个远程套接字.这很好,因为我可以通过互联网创建一个线程,传递套接字并建立一个点对点,或者更好的线程到线程连接.而这正是我想要的:来自客户端的一个线程应该连接到服务器上的目标线程.因此,我不需要工作池或负载平衡甚至不同步操作.服务器线程保存历史记录.ZeroMQ似乎很棒,但据我所知,它不会在接受时拆分套接字.

有没有办法与ZerMQ建立这样的同步线程到线程连接?

c++ networking zeromq

4
推荐指数
1
解决办法
216
查看次数

纯虚方法采用各种迭代器?

让多态基类insert在 stl 容器成员(本例中为向量)上有一个纯虚方法。该函数应该能够采用集合、向量、列表等容器的迭代器,但也要考虑引用的类型(移动语义)

\n

函数的纯虚拟性质使得使用模板函数变得不可能。据我所知,stl 容器的迭代器是单独的类型,这就是模板有用的原因。然而,多态性是必要的。我还注意到 std::move_iterator 能够封装所有类型的迭代器。

\n

是否还有其他“迭代器包装器”,我可以用它来在 Base 中定义纯虚拟方法,该方法接受各种迭代器,并且也像完美转发函数模板一样,以便客户端可以传递迭代器并移动迭代器?

\n

在引入多态性之前,函数是这样的:

\n
vector<Class> v;\ntemplate<typename Iter>\nvoid insert(Iter begin, Iter end) {\n    v1.insert(begin, end, std::end(v));\n}\n
Run Code Online (Sandbox Code Playgroud)\n

但现在派生类在插入时的行为略有不同(互斥体、通知观察者等)。如果有类似下面的东西那就太好了:

\n
vector<Class> v;\n\nvirtual void Base::insert(GenericIter begin, GenericIter end) = 0;\n\n[\xe2\x80\xa6]\n\nvoid DerivedMT::insert(GenericIter begin, GenericIter end) override\n{\n    mutex.lock();\n    v1.insert(begin, end, std::end(v));\n    mutex.unlock();\n}\n\n[\xe2\x80\xa6]\n\nvoid DerivedObserved::insert(GenericIter begin, GenericIter end) override\n{\n    v1.insert(begin, end, std::end(v));\n    notifyObservers();\n}\n
Run Code Online (Sandbox Code Playgroud)\n

c++

4
推荐指数
1
解决办法
169
查看次数