我一直在努力熟悉C++ 11中的std :: thread库,并且遇到了绊脚石.
最初我来自posix线程背景,并想知道如何在构造之前设置std :: thread的堆栈大小,因为我似乎无法找到执行此类任务的任何引用.
使用pthreads设置堆栈大小是这样的:
void* foo(void* arg);
.
.
.
.
pthread_attr_t attribute;
pthread_t thread;
pthread_attr_init(&attribute);
pthread_attr_setstacksize(&attribute,1024);
pthread_create(&thread,&attribute,foo,0);
pthread_join(thread,0);
Run Code Online (Sandbox Code Playgroud)
使用std :: thread时有类似的东西吗?
我一直在使用以下参考:
持久化std :: chrono time_point实例然后将它们读回另一个相同类型的实例的正确方法是什么?
typedef std::chrono::time_point<std::chrono::high_resolution_clock> time_point_t;
time_point_t tp = std::chrono::high_resolution_clock::now();
serializer.write(tp);
.
.
.
time_point_t another_tp;
serializer.read(another_tp);
Run Code Online (Sandbox Code Playgroud)
对write/read的调用,假设time_point_t类型的实例可以某种方式转换为字节表示,然后可以将其写入磁盘或套接字等或从磁盘或套接字读取.
Alf建议的可能解决方案如下:
std::chrono::high_resolution_clock::time_point t0 = std::chrono::high_resolution_clock::now();
//Generate POD to write to disk
unsigned long long ns0 = t0.time_since_epoch().count();
//Read POD from disk and attempt to instantiate time_point
std::chrono::high_resolution_clock::duration d(ns0)
std::chrono::high_resolution_clock::time_point t1(d);
unsigned long long ns1 = t1.time_since_epoch().count();
if ((t0 != t1) || (ns0 != ns1))
{
std::cout << "Error time points don't match!\n";
}
Run Code Online (Sandbox Code Playgroud)
注意:上面的代码有一个错误,因为最终实例化的时间点与原始时间点不匹配.
在旧样式time_t的情况下,人们通常只是根据其sizeof将整个实体写入磁盘,然后以相同的方式读取它 - 简而言之,新的std :: chrono类型的等价物是什么?
我正在寻找有关unicode感知std :: string库替换的建议.我有一堆使用std :: string,它的迭代器等的代码,并且现在想支持unicode字符串(首选免费或开源实现,正则表达式功能会很棒!).
我现在还不确定是否需要完全重写,或者我是否可以放弃支持所有std :: string接口的新字符串库.unicode世界似乎非常复杂,我只是想在我的应用程序中启用它而不必学习它的每一个方面.
顺便说一下,如果索引运算符必须将引用传递回1,2,3或4结构,理论上可以转换为1,2,3或4字节结构,它如何工作.如果传递更大或更小的值,内部数据表示的来回移位是否会发生?
我正在寻找写入的便携式轻量级库的建议C++,它支持数学和业务规则表达和评估.据我所知C++,没有提供这样的功能STL.
基本要求如下:
要评估的表达式将由数字和字符串以及表示数字或字符串的变量组成.
预计某些表达式每秒会被评估多次(1000-2000次),因此需要对表达式进行高性能评估.
最初是我公司的项目,我们将所有业务规则编码为从基本表达式派生的类.问题是随着表达式数量的增加,这种方法不能很好地扩展.
我已经google了一下,但我能找到的大多数"库"都是分流码算法的简单例子,大多数表达式解析器,在同一步骤中执行解析和评估,使它们不适合连续重新评估,并且大多数只支持数字.
我在找什么:
- 用C++编写的库(C++ 03或C++ 11)
- 稳定/生产值得
- 快速评估
- 便携式(win32/linux)
- 有关构建高性能业务规则引擎的任何建议.
示例业务规则:
'rule_result =(remaining_items <min_items)和(item =="beach ball")'
在我对系统进行了分析和分析之后,我得出的结论是,系统的记录组件是众多瓶颈之一,约占总运行时间的约17% - 记录了很多东西.
其中,记录器消耗的大约5%的时间与以下格式在ascii中生成日期/时间戳相关:YYYYMMDD HHMMSS.fff - 我们大致记录每秒约700k行.(大约700K x(localtime和gettimeofday)每秒呼叫)
我想知道SOERS有什么技术可以有效地制作时间戳.
跨平台解决方案将受到欢迎.
注1:我们查看了Boost.datetime - 它很棒,但对我们的需求来说有点太慢了,std :: chrono是一个完美的解决方案,但遗憾的是我们必须支持pre c ++ 11编译器.
注2:我们实现了一个简单的优化,它只计算每24小时一个日期部分(yyyymmdd),因此每行只有1个gettimeofday调用 - 虽然没有多大帮助.
c++ ×5
c++11 ×3
c++-chrono ×1
locale ×1
logging ×1
performance ×1
persistence ×1
pthreads ×1
rule-engine ×1
string ×1
timestamp ×1
unicode ×1
unix ×1
winapi ×1