小编Sco*_*ott的帖子

C++ Boost ASIO简单周期定时器?

我想要一个非常简单的周期性定时器,每50ms调用一次我的代码.我可以创建一个一直睡眠50ms的线程(但这很痛苦)...我可以开始研究Linux API用于制作计时器(但它不可移植)......

使用boost.我只是不知道这是可能的.boost是否提供此功能?

c++ linux boost boost-asio

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

如何从linux命令行以数字方式对文件进行排序

好吧,现在这更像是一个关于Linux的咆哮而不是一个问题,但也许有人知道如何做我想做的事.我知道这可以实现使用sort的命令,但我希望有一个更好的解决方案,因为获得该工作大约是写一个C程序做同样的事情一样简单.

我有文件,为了论证,让我说我有这些文件:(我的文件是相同的,我只是有更多)

  • 文件10.xml
  • 文件20.xml
  • 文件100.xml
  • 文件k10.xml
  • 文件k20.xml
  • 文件k100.xml
  • 文件M10.xml
  • 文件M20.xml
  • 文件M100.xml

现在这就是我希望它们排序的顺序.顺便说一下,这是Windows中默认排序的顺序.真好.Windows将连续的数字字符分组为一个有效字符,在字母之前按字母顺序排序.

如果我ls在linux命令行输入,我会得到以下垃圾.注意20被取代了.当我想要在报告中按顺序查看数百个这样的文件时,这是一个更大的交易.

  • 文件100.xml
  • 文件10.xml
  • 文件20.xml
  • 文件k100.xml
  • 文件k10.xml
  • 文件k20.xml
  • 文件M100.xml
  • 文件M10.xml
  • 文件M20.xml

我可以ls -1 | sort -n -k 1.6用来得到没有'k'或'M'正确的那些......

  • 文件k100.xml
  • 文件k10.xml
  • 文件k20.xml
  • 文件M100.xml
  • 文件M10.xml
  • 文件M20.xml
  • 文件10.xml
  • 文件20.xml
  • 文件100.xml

我可以ls -1 | sort -n -k 1.7用来解决这个问题

  • 文件100.xml
  • 文件10.xml
  • 文件20.xml
  • 文件k10.xml
  • 文件M10.xml
  • 文件k20.xml
  • 文件M20.xml
  • 文件k100.xml
  • 文件M100.xml

好的.让我们真的做对.ls -1 | grep "file-[0-9]*\.xml" | sort -n -k1.6 …

linux sorting command-line

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

封闭源库包括boost分配

我正在使用一个封闭的源库(由Activ financial提供),其中包括一个boost分配,包括一些boost头文件和boost库文件.

我也在现有的代码库中使用Boost,我需要在现有代码中使用Activ.

有些观点

  • 我可以封装我对Activ的使用,以便整个Activ部分相当于我编写的一个类,它不暴露任何Activ的头文件
  • 这个单头文件不使用任何提升任何东西
  • 通过这种方式,我可以确保我的代码的Activ部分使用Activ的Boost HPP文件,我的代码使用我的Boost的HPP文件

我担心链接.如何确保我的Activ依赖代码链接到Activ的Boost,而我的其他代码链接到我的Boost?

我现在正在使用g ++,也将在VS2008中使用它.我之前在VS2008工作过,但我不知道一切都是如何联系起来的.我想尝试确保它正确完成.

有没有办法在没有进一步将Activ部分封装在动态库中的情况下执行此操作?

编辑:

首先,我的最终产品总是一个可执行文件.对于两个人,我静静地联系以提升自己.Activ库包括Boost对象库的静态和动态版本,我打算静态链接它.

我从不在使用不同boost版本的代码之间传递Boost对象.

问题是,如何将一个cpp或.o文件链接到一个库文件中的对象,然后确保其他.o文件链接到另一个库文件中的相同对象?这可能吗?

c++ boost multiple-versions

9
推荐指数
1
解决办法
457
查看次数

我需要用锁来保护这个变量吗?

所以我在多处理器机器上有一个C++的布尔类型.变量开始生命为真,然后有几个线程,其中任何一个或多个可能将其写为假.

同时,这些线程也可以读取此变量以检查其状态.我不关心如果读取此变量与任何写入同步,它们每个都发生在代码中的不同位置,并且无论是在任何特定写入之前还是之后都无关紧要.现在,我需要一个锁定这个布尔值?

我需要锁定的唯一方法是,如果处于非常低的水平,内存可能会被两次竞争写入损坏.例如,如果处理器A上的汇编指令在处理器B执行相同操作的同时将0写入表示布尔值的字节...而不是写入0,则内存最终为值22或一些东西.这可能搞砸了.

所以,一般来说,如果proc A正在写3到一个内存位置,而proc B写7,没有同步,我保证最终得到3或7?还是容易打破记忆?

编辑:

谢谢你的评论.更多信息:当然程序中有同步.总而言之,有问题的标志是告知某个内存池是否"脏"(需要压缩).因此,任何线程都可以决定将此标志设置为false(意味着池是脏的).例如,从池中释放内存会使其变脏.然后,任何线程都可以读取此标志并设置另一个标志以指示需要清理 - 当从池中分配内存时执行此检查,如果内存不足则会发出清除信号.在迭代之间的主要关键部分的某处,每个线程都要查找更多要处理的数据,我将让线程检查第二个标志,并做一些适当的事情来确保:所有其他的theads完成当前的迭代,一个线程清理记忆,

所以我认为我不需要锁定,因为:锁定会确保写入不会与另一次写入或读取同时发生.但谁在乎呢,只要硬件没有让我失望,最糟糕的情况是读取在写入之前或之后随机发生 - 如果我用锁保护它会发生同样的事情,就在那时我们真的确定它是在......之前或之后...

我认为同样的论点适用于我上面提到的第二个标志.

c++ synchronization

8
推荐指数
2
解决办法
3898
查看次数

使用闭源库分发boost

我有一个需要使用某个闭源C++ API的应用程序.此API与一些Boost,二进制库文件和所有文件一起分发.我喜欢在我自己的代码中使用Boost.我不能只使用他们的Boost版本,因为他们没有分发我需要的Boost的所有部分.我该怎么办?目标平台是linux,最终也是Windows.

  • 我不会跨API边界传递Boost对象.
  • 我可以将事物编译为目标文件,以便我的代码使用我的 boost标头,API的代码使用 Boost标头.这部分看起来很简单.
  • 没有得到:如何 我的代码链接我的 Boost库文件,以及API的代码链接到 Boost库文件.我是否需要围绕API编译自己的包装器 - 一个包头,其头部包括Boost - 到动态库?(这是我能想到的唯一方法来进行链接.API的Boost库文件中的符号应该与我的Boost库文件中的符号相同.我必须分两个阶段进行链接,不是吗?唯一的方法我可以链接一个程序,而不是通过制作动态库,不是吗?)

c++ boost multiple-versions

7
推荐指数
1
解决办法
654
查看次数

C++字符串解析思路

我有另一个程序的输出,这个程序更像是人类可读而不是机器可读,但我还是打算解析它.这没什么太复杂的.

然而,我想知道在C++中最好的方法是什么.这更像是一种"一般惯例"类型的问题.

我查看了Boost.Spirit,甚至让它工作了一下.那东西太疯狂了!如果正在设计我正在阅读的语言,它可能是适合这项工作的工具.但实际上,考虑到它的极端编译时间,当我做错任何事情时,g ++会出现几页错误,这不是我需要的.(我也不太需要运行时性能.)

考虑使用C++运算符<<,但这似乎毫无价值.如果我的文件中有"John有5个小部件"这样的行,而其他人"Mary在459 Ramsy street工作",我怎么能确保我的程序中有第一个类型的行,而不是第二个类型?我必须阅读整行,然后使用类似的东西string::find,string::substr我想.

那就离开了sscanf.它会很好地处理上述情况

if( sscanf( str, "%s has %d widgets", chararr, & intvar ) == 2 )
      // then I know I matched "foo has bar" type of string, 
      // and I now have the parameters too
Run Code Online (Sandbox Code Playgroud)

所以我只是想知道我是否遗漏了某些内容,或者C++是否真的没有太多的内置替代品.

c++ string parsing

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

C++同步指南

有谁知道C++中同步问题的一个不错的参考?我正在考虑类似于C++ FAQ lite(和FQA lite)的东西,但是关于并发,锁定,线程,性能问题,指南,何时需要锁定以及何时不需要锁定,处理多线程库代码你无法控制等等.我不关心如何实现不同锁类型的内在问题等等,我只是使用boost.

我确信那里有很多好书,我更喜欢一些东西(最好是在线),我可以用它作为一个问题,当我脑子里浮现出一个问题或一个问题时.我并不是一个真正的初学者所以我希望能够在编写使用其他多线程库的多线程库时弹出所有不同类型的情况的简明参考.

喜欢:

  • 什么时候最好有一个大锁保护一堆数据而不是一堆保护每个数据的小锁?(拥有大量锁的成本是多少?资源获取成本?锁定时间性能成本?)

  • 将某些内容推送到队列并让另一个线程弹出队列与在原始线程中处理该数据的性能是什么?

  • 有没有简单的习语可以确保当你不那么关心性能时,事情会有效

无论如何,我只是想知道人们使用的是否有任何体面的参考.

c++ multithreading synchronization

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

模板化成员函数typedef将无法编译

#include <iostream>
#include <string>
using namespace std;

void printstr( const string & s ) { cout << s << endl; }

template < typename A >
class Test
{
public:
    typedef void (*Func)( const A & );
};

typedef void (*Func)( const string & );

template < typename A >
void bind(
        Test< A >::Func f,           //<---- does NOT compile
        //Func f,                    //<---- compiles & works!
        //void (*f)( const A & ),    //<---- compiles & works!
        const A & a) …
Run Code Online (Sandbox Code Playgroud)

c++ templates typedef

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

C++滥用字符串连接

所以我在最近几个月生成了一些代码,可能更多,我使用C++字符串库来连接字符串.像这样:

template< typename T >
string tostr( const T & val ); // implmented wherever

void somelibraryfunction( const char * );

// begin actual code

somelibraryfunction( ( "foo" + tostr( 5 ) ).c_str( ) );
Run Code Online (Sandbox Code Playgroud)

这编译并正常工作.我担心的是,创建的字符串临时在c_str被占用的地址被销毁之后被破坏,而我只是依赖于读取最近释放但未清除的内存.有什么想法吗?

c++ string

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