小编Kra*_*nar的帖子

不好的boost.ASIO性能

我在Windows上使用boost :: asio进行了一个非常简单的服务器/客户端性能测试,它似乎表现得非常糟糕.我希望我只是错误地使用该库,并希望得到任何建议.

我有一个会话类,它写一个消息长度,然后写一条消息,然后等待读取消息长度,然后读取一条消息,并一直反复不停地这样做.当我在自己的计算机上本地运行时,我的性能却非常快; 当我在一台计算机上运行服务器而在另一台计算机上运行客户机时,即使在同一网络上,性能也会降低,需要多达1秒才能进行读/写操作.

服务器源代码文件如下:

#include <cstdlib>
#include <iostream>
#include <boost/asio.hpp>
#include <boost/bind.hpp>

using namespace boost;
using namespace boost::asio;
using namespace boost::asio::ip;
using namespace std;

class Session {
  public:

    Session(io_service& ioService)
      : m_socket(ioService) {}

    tcp::socket& GetSocket() {
      return m_socket;
    }

    void StartRead() {
      m_messageSizeIterator = reinterpret_cast<char*>(&m_messageSize);
      async_read(m_socket, buffer(m_messageSizeIterator, sizeof(m_messageSize)),
        bind(&Session::HandleSizeRead, this, placeholders::error,
        placeholders::bytes_transferred));
    }

    void StartWrite(const char* message, int messageSize) {
      m_messageSize = messageSize;
      m_message = new char[m_messageSize];
      memcpy(m_message, message, m_messageSize);
      async_write(m_socket, buffer(&m_messageSize, sizeof(int)),
        bind(&Session::HandleSizeWritten, this, placeholders::error));
    }

    void …
Run Code Online (Sandbox Code Playgroud)

c++ sockets performance boost boost-asio

25
推荐指数
2
解决办法
2万
查看次数

如何使用CMake生成针对Windows XP的Visual Studio 2012项目?

随着Visual Studio 2012 Update 1的发布,我希望构建一个支持Windows XP的C++项目.有没有办法使用CMake生成一个针对Windows XP的项目?基本上,CMake需要生成一个使用Platform Toolset = Visual Studio 2012 - Windows XP(v110_xp)的项目文件.

c++ windows-xp cmake visual-studio visual-studio-2012

18
推荐指数
2
解决办法
1万
查看次数

Windows Scheme/Lisp实现

随着LISP和Scheme的数千种实现可用,我很难找到适合用于Windows开发的实现.我在学校学习了这些语言并发现它们非常优雅,但是,我似乎无法找到适合开发除学术环境之外的代码的实现.

什么是具有以下要求的Scheme或LISP实现?

编译为本机代码,而不是编译为C.

支持多个处理器上的多线程(即多个线程可以同时运行).

生成64位代码.

可以在Windows中使用而无需Cygwin.

lisp windows 64-bit scheme

15
推荐指数
3
解决办法
9114
查看次数

为可移动类型输入特征?

我正在尝试编写一个模板,如果T有一个移动构造函数,则表现为单向,如果T没有,则表示另一种方式.我试图寻找一种可以识别这种情况的类型特征,但没有这样的运气,我为此编写自己的类型特征的尝试都失败了.

任何帮助赞赏.

c++ type-traits c++11

14
推荐指数
2
解决办法
4761
查看次数

如何使用Visual Studio 2013构建Boost

使用新发布的Visual Studio 2013构建boost时,会发生以下错误:

未知的编译器版本 - 请运行配置测试并报告结果

我使用bjam通过以下命令构建boost:

bjam%BJAM_PROCESSORS% - toolset = msvc --build-type =完成msvc --stagedir =阶段阶段

我必须使用命令提示符构建boost,我无法下载prebuilt版本的boost.

谢谢.

c++ boost visual-studio visual-studio-2013

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

GCC 和 clang 之间的 constexpr 差异

以下在 GCC 9 中编译但不在 clang 10 中编译,我想知道这两个编译器中的哪一个符合标准:

template<typename T>
struct A {
  static const T s;
  static const T v;
};

template<typename T>
constexpr const T A<T>::s = T(1);

template<typename T>
constexpr const T A<T>::v = A<T>::s;

int main(int, char**) {
  constexpr auto a = A<double>::v;
  return 0;
}
Run Code Online (Sandbox Code Playgroud)

这是一个更大问题的最小例子,这就是为什么字段sv显式声明为const但被定义为constexpr,这是故意的。

GCC 编译该代码是正确的还是 clang 正确拒绝它?

c++ c++17

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

在 PyQT 和 Boost.Python 之间共享小部件

我想知道是否可以在 PyQt 和 Boost.Python 之间共享小部件。

我将在我的使用 Qt 的应用程序中嵌入一个 Python 解释器。我希望我的应用程序的用户能够将他们自己的 UI 小部件嵌入到用 C++ 编程并通过 Boost.Python 公开的 UI 小部件中。

这是可能的,人们将如何去做?

python qt pyqt boost-python python-sip

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

Boost :: any和polymorphism

boost::any用来存储指针,并想知道是否有提取多态数据类型的方法.

这是一个理想情况下我想做的简单示例,但目前无效.

struct A {};

struct B : A {};

int main() {

    boost::any a;
    a = new B();
    boost::any_cast< A* >(a);
}
Run Code Online (Sandbox Code Playgroud)

这失败是因为a正在存储B*,而我正在尝试提取A*.有没有办法实现这个目标?

谢谢.

c++ polymorphism boost-any

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

从C++中的指针向量中删除元素

我记得听说下面的代码不符合C++,并希望有比我更多C++法律术语的人能够确认或否认它.

std::vector<int*> intList;
intList.push_back(new int(2));
intList.push_back(new int(10));
intList.push_back(new int(17));

for(std::vector<int*>::iterator i = intList.begin(); i != intList.end(); ++i) {
  delete *i;
}
intList.clear()
Run Code Online (Sandbox Code Playgroud)

理由是,向量包含指向无效内存的指针是非法的.现在显然我的例子将编译,它甚至可以在我所知道的所有编译器上工作,但是它是标准兼容的C++还是我应该执行以下操作,我被告知实际上是符合标准的方法:

while(!intList.empty()) {
  int* element = intList.back();
  intList.pop_back();
  delete element;
}
Run Code Online (Sandbox Code Playgroud)

c++ stl vector delete-operator

1
推荐指数
2
解决办法
2728
查看次数