小编bob*_*eff的帖子

使用 boost::asio stackless 协程通过 HTTP 下载多个文件

我翻译的例子,从在Lua编程罗伯托·萨利姆斯使用协同程序,以C ++使用通过HTTP下载几个文件的boost :: ASIO和stackful协同程序。这是代码:

#include <iostream>
#include <chrono>
#include <boost/asio.hpp>
#include <boost/asio/spawn.hpp>

using namespace std;
using namespace boost::asio;

io_service ioService;

void download(const string& host, const string& file, yield_context& yield)
{
  clog << "Downloading " << host << file << " ..." << endl;

  size_t fileSize = 0;
  boost::system::error_code ec;

  ip::tcp::resolver resolver(ioService);

  ip::tcp::resolver::query query(host, "80");
  auto it = resolver.async_resolve(query, yield[ec]);

  ip::tcp::socket socket(ioService);
  socket.async_connect(*it, yield[ec]);

  ostringstream req;
  req << "GET " << file << " HTTP/1.0\r\n\r\n"; …
Run Code Online (Sandbox Code Playgroud)

c++ boost coroutine boost-asio

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

我可以检索用柯南包管理器打包的库的源代码以便能够在其中进行调试吗?

通常,Conan包只包含构建工件,如*.dll*.lib*.pdb*.so*.a*.dylib文件以及给定CC++库的头文件。然而,有时当您调试使用库的代码时,能够进入库代码以查看内部发生的情况非常有用。例如,确定何时出现问题是由于库的不正确使用还是由于其中的错误。

  1. 是否可以与您使用的包一起检索构建它的源代码,以便能够在其中进行调试?
  2. 如果这对于任意包是不可能的,是否可以自己创建这样的包?

c c++ packages conan

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

与 boost::property_tree XML 解析器一起使用时 boost::coroutine 库崩溃

我正在使用Simple-Web-Server库来创建简单的 Web 服务,以便将XML转换为JSON,反之亦然。反过来,它使用了几个boost库以及其中的boost::coroutine。对于XML<->JSON转换,我使用boost::property_tree库进行中间表示。这是代码:

#include <iostream>
#include <sstream>

#include <server_http.hpp>

#define BOOST_SPIRIT_THREADSAFE
#include <boost/property_tree/ptree.hpp>
#include <boost/property_tree/json_parser.hpp>
#include <boost/property_tree/xml_parser.hpp>

using namespace std;
using namespace boost::property_tree;

using HttpServer = SimpleWeb::Server<SimpleWeb::HTTP>;

int main()
{
  HttpServer server(8080, 1);

  server.resource["^/json_to_xml$"]["POST"] = [](auto& response, auto request) {
    try
    {
      ptree pt;
      read_json(request->content, pt);
      ostringstream json, xml;
      write_json(json, pt);
      clog << "JSON request content:" << endl << json.str() << endl;
      write_xml(xml, pt, xml_writer_make_settings<ptree::key_type>(' ', …
Run Code Online (Sandbox Code Playgroud)

c++ boost boost-asio boost-propertytree boost-coroutine

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

如何使用自定义 boost::log 格式化程序输出 TimeStamp 和 ThreadID 属性?

我正在使用自定义boost::log格式化程序对输出日志消息进行颜色编码,但我找不到将TimeStampThreadID属性添加到日志的正确方法。当我使用文件日志记录时,我只是将其写keywords::format = "[%TimeStamp%] [%ThreadID%] [%Severity%]: %Message%"logging::add_file_log参数。我想在以下自定义格式化程序中具有类似的效果:

void coloring_formatter(const logging::record_view& record,
                        logging::formatting_ostream& stream)
{
  auto severity = record[logging::trivial::severity];
  assert(severity);

  stream << "\e[1m";

  switch (severity.get())
  {
  case logging::trivial::severity_level::trace:
    stream << "\e[97m";
    break;
  case logging::trivial::severity_level::debug:
    stream << "\e[34m";
    break;
  case logging::trivial::severity_level::info:
    stream << "\e[32m";
    break;
  case logging::trivial::severity_level::warning:
    stream << "\e[93m";
    break;
  case logging::trivial::severity_level::error:
    stream << "\e[91m";
    break;
  case logging::trivial::severity_level::fatal:
    stream << "\e[41m";
    break;
  }

  stream // << output TimeStamp
         // << output ThreadID …
Run Code Online (Sandbox Code Playgroud)

c++ logging boost boost-logging boost-log

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

实现 PostgreSQL 表的历史记录

我想实现 PostgreSQL 表的更改历史记录。该表的定义方式如下:

CREATE TABLE "ps_counters"
(
    "psid" integer NOT NULL,
    "counter" bigint[] NOT NULL
);
Run Code Online (Sandbox Code Playgroud)

我希望历史表看起来像:

CREATE TABLE "ps_counters_history"
(
    "timestamp" timestamp NOT NULL,
    "psid" integer NOT NULL,
    "counter" bigint[] NOT NULL
);
Run Code Online (Sandbox Code Playgroud)

我需要一个触发器和一个存储过程,在每次更改(插入或更新)时ps_couneters插入ps_counters_history,但除了防止ps_counters_history变得太大之外,我希望ps_counters_history每个月对表进行分区。

sql database postgresql database-partitioning

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

如何在停止 io_service 之前等待所有挂起的完成处理程序被执行?

我正在使用boost::asio编写服务器。我有多个线程,每个线程都拥有自己的io_service对象。当没有要执行的完成处理程序时,我使用io_service::work对象来保持io_service运行。在某些时刻,我正在调用对象的stop方法io_service来完成调用io_serice::run. 但是在某些情况下,当我打电话时,stop我已经发布了io_service尚未完成的对象竞争处理程序。调用会stop阻止发布的竞争处理程序执行,但这对我来说是不可接受的,因为我需要在停止线程之前完成所有挂起的工作。如何在调用stop方法之前等待所有挂起的完成处理程序首先被执行io_service

c++ multithreading boost boost-asio

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

在什么情况下无锁数据结构比基于锁的数据结构快?

我目前正在阅读Anthony Williams撰写的《 C ++ Concurrency in Action》一书,其中有几种无锁数据结构实现。在安东尼所写的关于无锁数据结构的章节的前面,他正在写作:

这给我们带来了无锁和无等待代码的另一个缺点:尽管它可能增加数据结构上操作并发的可能性,并减少单个线程花在等待上的时间,但它可能会降低整体性能。

的确,我针对前一章中基于锁的实现测试了本书中描述的所有无锁堆栈实现。而且似乎无锁代码的性能始终低于基于锁的堆栈。

在什么情况下,无锁数据结构更理想,因此必须首选?

c++ concurrency multithreading lock-free data-structures

5
推荐指数
2
解决办法
2358
查看次数

在 C++ 中处理指针别名的确切规则是什么?

在 C 中有一个restrict关键字告诉编译器在函数的指针参数之间没有别名,允许它以这种方式执行一些否则将不允许的优化。例如:

void add(int* restrict ptrA,
         int* restrict ptrB,
         int* restrict val)
{
    *ptrA += *val;
    *ptrB += *val;
}
Run Code Online (Sandbox Code Playgroud)

现在函数体中的指令可以并行执行,因为val和 某些ptr参数之间没有别名。在 C++ 中没有restrict关键字。

  1. 在标准定义的 C++ 中处理指针别名的确切规则是什么?
  2. 哪些流行的编译器扩展提供类似于restrictC 中的语义?例如MSVCg++clang++Intel C++ compiler
  3. restrict在未来的 C++ 标准中是否有任何计划要标准化的关键字?

c++ pointers strict-aliasing language-lawyer

5
推荐指数
0
解决办法
720
查看次数

如何仅链接到 Conan 包中的某些库?

我正在考虑开始使用Conan包管理器来管理我的 C++ 项目的第三方依赖项,但我找不到如何仅链接到Conan包中的某些库。我使用CMake作为构建系统,并使用Conan多配置CMake生成器:cmake_multi

按照文档中的示例,我有以下代码:

project(FoundationTimer)
cmake_minimum_required(VERSION 2.8.12)

set(TARGET_NAME timer)

include(${CMAKE_BINARY_DIR}/conanbuildinfo_multi.cmake)
conan_basic_setup(TARGETS)

add_executable(${TARGET_NAME} timer.cpp)
target_link_libraries(${TARGET_NAME} CONAN_PKG::Poco)
Run Code Online (Sandbox Code Playgroud)

在我的CMakeLists.txt

使用CMake生成解决方案后:

conan install -g cmake_multi -s build_type=Debug -s compiler.runtime=MDd ..\mytimer\
conan install -g cmake_multi -s build_type=Release -s compiler.runtime=MD ..\mytimer\
cmake ..\mytimer\ -G "Visual Studio 14 2015 Win64"
Run Code Online (Sandbox Code Playgroud)

这会生成对Conan包中的所有库以及Poco Conan包所依赖的其他Conan包中的所有库(如OpenSSLzlib )的依赖关系。

用于调试配置的Visual Studio项目选项中的其他依赖项设置为:

C:\Users\ivan.bobev\.conan\data\Poco\1.7.8p3\pocoproject\stable\package\67348df82fcd362bbf088991f95bb229be582635\lib\PocoUtilmdd.lib
C:\Users\ivan.bobev\.conan\data\Poco\1.7.8p3\pocoproject\stable\package\67348df82fcd362bbf088991f95bb229be582635\lib\PocoMongoDBmdd.lib
C:\Users\ivan.bobev\.conan\data\Poco\1.7.8p3\pocoproject\stable\package\67348df82fcd362bbf088991f95bb229be582635\lib\PocoNetmdd.lib
C:\Users\ivan.bobev\.conan\data\Poco\1.7.8p3\pocoproject\stable\package\67348df82fcd362bbf088991f95bb229be582635\lib\PocoNetSSLWinmdd.lib
C:\Users\ivan.bobev\.conan\data\Poco\1.7.8p3\pocoproject\stable\package\67348df82fcd362bbf088991f95bb229be582635\lib\PocoCryptomdd.lib
C:\Users\ivan.bobev\.conan\data\Poco\1.7.8p3\pocoproject\stable\package\67348df82fcd362bbf088991f95bb229be582635\lib\PocoDatamdd.lib
C:\Users\ivan.bobev\.conan\data\Poco\1.7.8p3\pocoproject\stable\package\67348df82fcd362bbf088991f95bb229be582635\lib\PocoDataSQLitemdd.lib …
Run Code Online (Sandbox Code Playgroud)

c++ package-managers cmake visual-c++ conan

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

什么是 GPU 驱动渲染?

如今,我从不同的地方听说所谓的 GPU 驱动渲染,这是一种新的渲染范例,根本不需要绘制调用,并且它受到新版本 OpenGL 和 Vulkan API 的支持。有人可以解释它在概念层面上的实际工作原理以及与传统方法的主要区别是什么?

opengl graphics rendering gpu vulkan

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