我在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) 随着Visual Studio 2012 Update 1的发布,我希望构建一个支持Windows XP的C++项目.有没有办法使用CMake生成一个针对Windows XP的项目?基本上,CMake需要生成一个使用Platform Toolset = Visual Studio 2012 - Windows XP(v110_xp)的项目文件.
随着LISP和Scheme的数千种实现可用,我很难找到适合用于Windows开发的实现.我在学校学习了这些语言并发现它们非常优雅,但是,我似乎无法找到适合开发除学术环境之外的代码的实现.
什么是具有以下要求的Scheme或LISP实现?
编译为本机代码,而不是编译为C.
支持多个处理器上的多线程(即多个线程可以同时运行).
生成64位代码.
可以在Windows中使用而无需Cygwin.
我正在尝试编写一个模板,如果T有一个移动构造函数,则表现为单向,如果T没有,则表示另一种方式.我试图寻找一种可以识别这种情况的类型特征,但没有这样的运气,我为此编写自己的类型特征的尝试都失败了.
任何帮助赞赏.
使用新发布的Visual Studio 2013构建boost时,会发生以下错误:
未知的编译器版本 - 请运行配置测试并报告结果
我使用bjam通过以下命令构建boost:
bjam%BJAM_PROCESSORS% - toolset = msvc --build-type =完成msvc --stagedir =阶段阶段
我必须使用命令提示符构建boost,我无法下载prebuilt版本的boost.
谢谢.
以下在 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)
这是一个更大问题的最小例子,这就是为什么字段s
和v
显式声明为const
但被定义为constexpr
,这是故意的。
GCC 编译该代码是正确的还是 clang 正确拒绝它?
我想知道是否可以在 PyQt 和 Boost.Python 之间共享小部件。
我将在我的使用 Qt 的应用程序中嵌入一个 Python 解释器。我希望我的应用程序的用户能够将他们自己的 UI 小部件嵌入到用 C++ 编程并通过 Boost.Python 公开的 UI 小部件中。
这是可能的,人们将如何去做?
我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++,并希望有比我更多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++ ×7
boost ×2
64-bit ×1
boost-any ×1
boost-asio ×1
boost-python ×1
c++11 ×1
c++17 ×1
cmake ×1
lisp ×1
performance ×1
polymorphism ×1
pyqt ×1
python ×1
python-sip ×1
qt ×1
scheme ×1
sockets ×1
stl ×1
type-traits ×1
vector ×1
windows ×1
windows-xp ×1