小编Mic*_*rek的帖子

io_service :: poll_one非确定性行为

在下面的代码中,我希望输出始终为1,因为我希望在poll_one()调用时只运行一个处理程序.但是,一次大约300次,输出实际上是3.根据我对boost库的理解,这似乎是不正确的.非确定性行为是错误的还是预期的?

#include <boost/asio.hpp>

int main() {
  boost::asio::io_service io;
  boost::asio::io_service::work io_work(io);
  boost::asio::io_service::strand strand1(io);
  boost::asio::io_service::strand strand2(io);
  int val = 0;

  strand1.post([&val, &strand2]() {
    val = 1;
    strand2.post([&val]() {
      val = 2;
    });
    boost::asio::spawn(strand2, [&val](boost::asio::yield_context yield) {
      val = 3;
    });
  });

  io.poll_one();
  std::cout << "Last executed: " << val << std::endl;

  return 0;
}
Run Code Online (Sandbox Code Playgroud)

使用boost-asio 1.60.0.6

c++ boost boost-asio

13
推荐指数
1
解决办法
304
查看次数

最长的正面子阵列

数组A []仅包含'1'和'-1'

构造数组B,其中B [i]是从j开始并在i结束的最长连续子阵列的长度,其中 j < i and A[j] + .. + A[i] > 0

明显的O(n ^ 2)解决方案是:

for (int i = 0; i < A.size(); ++i) {
    j = i-1;
    sum = A[i];
    B[i] = -1; //index which fills criteria not found
    while ( j >=0 ) {
        sum += A[j];
        if (sum > 0)
            B[i] = i - j + 1;
        --j;
    }
}
Run Code Online (Sandbox Code Playgroud)

我正在寻找O(n)解决方案.

arrays algorithm

10
推荐指数
1
解决办法
957
查看次数

RPM spec缺少卸载部分?

我在RPM规范文档中看不到卸载部分.我确实看到了preun和postun.

  1. 是否有卸载阶段?
  2. 在卸载阶段到底发生了什么?基于%files部分,删除了一个文件列表?那就是它?

rpm rpm-spec

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

Postgres-创建English_United States.1252归类

Windows 7上的Postgres 9.2,我正在尝试创建English_United States.1252自定义归类

user=# create database test template template0 ENCODING = 'utf8' LC_COLLATE = 'English_United States.1252' LC_CTYPE = 'English_United States.1252';
CREATE DATABASE
user=# \c test
test=# create collation english from "English_United States.1252";
ERROR:  collation "English_United States.1252" for encoding "UTF8" does not exist
Run Code Online (Sandbox Code Playgroud)

如您所见,将显示以下错误: 错误:编码“ UTF8”的排序规则“ English_United States.1252”不存在

在Windows上为utf8 db编码创建英语美国排序规则的正确方法是什么?

windows localization collation internationalization postgresql-9.2

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

subclassing stringstream给出"0x401bad ABC"而不是"Foo ABC"

#include <sstream>
#include <iostream>
#include <string>

class A : public std::stringstream {
        public:
                A() {}
                ~A() { std::cout << str().c_str() << std::endl; }
};

int main() {
    A() << "Foo" << std::string(" ABC");
}
Run Code Online (Sandbox Code Playgroud)

我期待打印的程序:

Foo ABC
Run Code Online (Sandbox Code Playgroud)

代替

0x401bad ABC
Run Code Online (Sandbox Code Playgroud)

为什么要打印0x401bad ABC

g++ --version
g++ (Ubuntu/Linaro 4.6.3-1ubuntu5) 4.6.3
Run Code Online (Sandbox Code Playgroud)

c++ stringstream

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

如何序列化boost :: dynamic_bitset?

如何使用boost :: dynamic_bitset成员序列化一个类?

#include <boost/archive/text_oarchive.hpp>
#include <boost/archive/text_iarchive.hpp>
#include <boost/dynamic_bitset.hpp>
#include <boost/serialization/bitset.hpp>
#include <sstream>

class A
{
    friend class boost::serialization::access;
    boost::dynamic_bitset<> x;
    template<class Archive>
    void serialize(Archive & ar, const unsigned int){
        ar & x;
    }
};

int main()
{
    A a;
    std::stringstream ss;
    boost::archive::text_oarchive oa(ss);
    oa << a;
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

编译给出错误(提升1.57)

In file included from /usr/include/boost/serialization/extended_type_info_typeid.hpp:37:0,
                 from /usr/include/boost/archive/detail/oserializer.hpp:38,
                 from /usr/include/boost/archive/detail/interface_oarchive.hpp:23,
                 from /usr/include/boost/archive/detail/common_oarchive.hpp:22,
                 from /usr/include/boost/archive/basic_text_oarchive.hpp:32,
                 from /usr/include/boost/archive/text_oarchive.hpp:31,
                 from dynamic_bitset_setial.cpp:1:
/usr/include/boost/serialization/access.hpp: In static member function ‘static void boost::serialization::access::serialize(Archive&, T&, unsigned int) [with …
Run Code Online (Sandbox Code Playgroud)

c++ boost boost-dynamic-bitset

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

CreateProcess:在C++/Windows中将子stdout重定向到父stdout

根据MSDN,这将子stdout重定向到父stdout,但它没有,有什么问题?

   PROCESS_INFORMATION pi;
   STARTUPINFOA si;

   ZeroMemory( &si, sizeof(si) );
   si.cb = sizeof(si);
   ZeroMemory( &pi, sizeof(pi) );
   si.hStdOutput = GetStdHandle(STD_OUTPUT_HANDLE);
   si.hStdError = GetStdHandle(STD_ERROR_HANDLE);
   si.dwFlags |= STARTF_USESTDHANDLES;

   BOOL ret = CreateProcessA( 0, cmd_line, 0, 0, TRUE, CREATE_NO_WINDOW, 0, 0, & si, & pi);
Run Code Online (Sandbox Code Playgroud)

使用DuplicateHandle没有帮助:

HANDLE out, err;//global variables
...
PROCESS_INFORMATION pi;
STARTUPINFOA si;

ZeroMemory( &si, sizeof(si) );
si.cb = sizeof(si);
ZeroMemory( &pi, sizeof(pi) );  
BOOL ret = DuplicateHandle( GetCurrentProcess(), GetStdHandle(STD_OUTPUT_HANDLE),  GetCurrentProcess(), &out, 0, TRUE, DUPLICATE_SAME_ACCESS);//todo check ret
ret = DuplicateHandle( GetCurrentProcess(), GetStdHandle(STD_ERROR_HANDLE), …
Run Code Online (Sandbox Code Playgroud)

c++ windows

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

TCP,recv功能挂起尽管KEEPALIVE

在服务器停止运行后,TCP keepalive(小超时)是否阻止客户端挂起recv?

场景:

服务器和客户端在不同的机器上运行

  1. 客户端通过TCP使用KEEPALIVE选项连接到服务器
  2. 客户端发送"Hello服务器"并等待响应
  3. 服务器收到"Hello服务器"并响应"Hello客户端"
  4. 客户端收到响应,休眠10秒,重复步骤2-4(现在跳过步骤1 - 保留连接)

在客户端休眠期间,服务器已关闭,现在:

  1. 客户醒来
  2. 发送"Hello server"并等待响应
  3. recv放弃20分钟后 - 我期待KEEPALIVE在45秒后打破recv功能:

设置KEEPALIVE选项:

void TCPclient::setkeepalive()
{
   int optval;
   socklen_t optlen = sizeof(optval);

   /* Check the status for the keepalive option */
   if(getsockopt(sock, SOL_SOCKET, SO_KEEPALIVE, &optval, &optlen) < 0) {
        throw std::string("getsockopt");
   }

   optval = 1;
   optlen = sizeof(optval);
   if(setsockopt(sock, SOL_SOCKET, SO_KEEPALIVE, &optval, optlen) < 0) {
      close(s);
      exit(EXIT_FAILURE);
   }

    optval = 2;
    if (setsockopt(sock, SOL_TCP, TCP_KEEPCNT, &optval, optlen) < 0) {
        throw …
Run Code Online (Sandbox Code Playgroud)

c++ sockets linux network-programming tcp

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