我已经使用Boost C++库很长一段时间了.我非常喜欢用于网络编程的Boost Asio C++库.然而,我被介绍到另外两个库:POCO和自适应通信环境(ACE)框架.我想知道每个人的好坏.
我在ACE,Boost和wxWidgets方面拥有丰富的经验.我最近找到了POCO库.有没有人对它们有任何经验,以及它们在性能和可靠性方面与ACE,Boost和wxWidgets相比如何?
我特别感兴趣用POCO取代ACE.我无法让ACE使用带有x64目标的VS2008进行编译.我主要使用ACE_Task,所以我认为我可以用Poco的线程和消息队列替换它们.
我感兴趣的POCO的其他部分是HTTPServer,HTTPClient和LayeredConfiguration.这些库与Boost和wxWidgets中的库类似,但我尝试将wxWidgets的使用限制为GUI组件,而类似的Boost库则很难.
我对任何人可以分享关于POCO的任何经验感兴趣,无论好坏.
这是在Linux操作系统上.App是用C++用ACE库编写的.
我怀疑这个过程中的一个线程有时会被异常长时间(5到40秒)阻塞.该应用程序大多数时间运行良好,除了每天有几次这个问题.还有其他类似的5个应用程序在盒子上运行,由于大量的套接字传入数据,它们也受I/O限制.
我想知道是否有任何我可以以编程方式做的事情,看看线程/进程是否正在获得他们的时间片.
对高频交易/高性能计算感兴趣我遇到了“ACE”:
http://www.cs.wustl.edu/~schmidt/ACE-overview.html
但是,我注意到网站上的很多论文都是1995时代的,我想知道这个框架还在使用吗,如果没有,它是什么替代品?
或者有boost取代了这个?ACE 是否包含所需的增强功能的库?
考虑我有如下的结构:
struct Bitmask
{
unsigned char payload_length: 7;
unsigned char mask: 1;
unsigned char opcode: 4;
unsigned char rsv3: 1;
unsigned char rsv2: 1;
unsigned char rsv1: 1;
unsigned char fin: 1;
};
const char* payload = "Hello";
const size_t payload_length = strlen(payload);
Bitmask* header = new Bitmask();
header->fin =1;
header->rsv1 = 0;
header->rsv2 = 0;
header->rsv3 = 0;
header->opcode = 1;
header->mask = 0;
header->payload_length = payload_length;
iovec iov[2];
iov[0].iov_base = (char*)header;
iov[0].iov_len = sizeof (header);
iov[1].iov_base = (char …Run Code Online (Sandbox Code Playgroud) 我们有一个相当大的C++项目,我现在正在迁移到VS2010,并且还在更新一些库.到目前为止,一切都建立得很好,除了我(对我来说)非常奇怪的错误,显然有很多(编辑:非)标准C函数和符号没有定义:
error C2039: 'strdup' : is not a member of '`global namespace'' ...\ACE_wrappers\ace\OS_NS_string.inl 222
...
error C2065: 'O_WRONLY' : undeclared identifier ...\ACE_wrappers\ace\OS_NS_unistd.inl 1057
...
Run Code Online (Sandbox Code Playgroud)
这会影响我的以下功能和符号:
strdup getcwd O_WRONLY
putenv swab O_TRUNC
access unlink S_IFDIR
chdir mkdir S_IFREG
rmdir tempnam O_RDONLY
isascii
Run Code Online (Sandbox Code Playgroud)
ACE实验过的包含文件中的strdup一部分是看起来像这样的部分:
ACE_INLINE char *
ACE_OS::strdup (const char *s)
{
# if (defined (ACE_LACKS_STRDUP) && !defined(ACE_STRDUP_EQUIVALENT)) \
|| defined (ACE_HAS_STRDUP_EMULATION)
return ACE_OS::strdup_emulation (s);
# elif defined (ACE_STRDUP_EQUIVALENT)
return ACE_STRDUP_EQUIVALENT (s);
# elif defined (ACE_HAS_NONCONST_STRDUP)
return ::strdup …Run Code Online (Sandbox Code Playgroud) 我正在计算进程/线程正在使用的cpu时间之间的增量,在某个函数的调用之间.
我为进程cpu时间获得了不可能的值,有时候下一次调用返回较小的cpu时间,这是不可能的.
这是我用来计算cpu时间的代码:
u64 CpuTime::calculateCpuTime(bool a_thread)
{
struct rusage l_rusage;
int retVal;
if(a_thread)
{
retVal = getrusage(1, &l_rusage); //1 = RUSAGE_THREAD
}
else
{
retVal = getrusage(0, &l_rusage); //0 = RUSAGE_SELF
}
ASSERT(retVal==0);
u64 userUSeconds = (static_cast<u64>(l_rusage.ru_utime.tv_sec)*1000000)+
(static_cast<u64>(l_rusage.ru_utime.tv_usec));
u64 systemUSeconds = (static_cast<u64>(l_rusage.ru_stime.tv_sec)*1000000)+
(static_cast<u64>(l_rusage.ru_stime.tv_usec));
if(a_thread)
{
return userUSeconds + systemUSeconds;
}
return (userUSeconds + systemUSeconds) / ACE_OS::num_processors_online();
}
Run Code Online (Sandbox Code Playgroud)
计算检索它的函数也是异步的,一次不能超过1个线程访问它.
这是不可能的输出(过程)的一个例子:
2016/03/23 13:39:05.187 - #2 - 15471/15055 - ThreadDeltaCpuTime = 6000 ThreadCpuTime = 46756013 ProcessCpuTime = 39820759 deltaProcessCpuTime = 250
2016/03/23 13:39:05.386 …
我使用 ACE TAO 作为 CORBA 实现。我想知道是否有人知道设置最大消息大小和最大连接数的任何选项。
omniORB有两个选项,giopMaxMsgSize并且maxGIOPConnectionPerServer。
即使 TAO 有ORBMaxMessageSize并且ORBLingerTimeout它导致我的服务器崩溃。我什至不知道这些是否是正确的选择。
这就是 TAO 调试输出的内容。
TAO (30232|3086943952) ORB_Core: Unable to initialize Codeset Manager
TAO (30232|3086943952) - Completed initializing the process-wide service context
TAO (30232|3086943952) - Default ORB services initialization begins
TAO (30232|3086943952) - Default ORB services initialization completed
TAO (30232|3086943952) - We are the default ORB ...
TAO (30232|3086943952) - Initializing the orb-specific services
TAO (30232|3086943952) - Setting primary connection timeout hook
TAO …Run Code Online (Sandbox Code Playgroud) 我正在寻找一种将c ++数据包序列化到网络流的解决方案.
我在这里看到很多帖子引用人们:
高手
Google协议缓冲区
升压::序列化
Qt :: QDataStream
我的要求/限制:
解决方案必须是不知道LitteEndian/BigEndian.机器架构x86/x64和平台无关.
前3个解决方案的占地面积(RAM和ROM)对我的平台来说太大了,第四个解决方案与下一个要求相冲突.
该解决方案不需要大量的样板代码(将有200多个数据包被序列化).
谢谢,Koby Meir
我正在尝试编译 ACE lib,但编译时出错。
\n\n我的Linux系统是Slackware 14.2 64位
\n\n该lib是ACE版本6.1.4(我需要编译的版本)
\n\n在发布本文之前,我已按照从ACE web构建 ACE 的所有步骤进行操作。
\n\n如何编译这个lib?
\n\n这是错误:
\n\nIn file included from /home/cyneo/Downloads/ACE_wrappers/ace/OS_NS_Thread.h:32,\n from /home/cyneo/Downloads/ACE_wrappers/ace/Guard_T.h:26,\n from /home/cyneo/Downloads/ACE_wrappers/ace/Free_List.cpp:7,\n from /home/cyneo/Downloads/ACE_wrappers/ace/Free_List.h:142,\n from /home/cyneo/Downloads/ACE_wrappers/ace/Malloc_T.h:26,\n from /home/cyneo/Downloads/ACE_wrappers/ace/Local_Name_Space.h:20,\n from Local_Name_Space.cpp:3:\n/home/cyneo/Downloads/ACE_wrappers/ace/os_include/os_sched.h:47:6: error: conflicting declaration \xe2\x80\x98typedef struct cpu_set_t cpu_set_t\xe2\x80\x99\n} cpu_set_t;\n ^~~~~~~~~\n\nIn file included from /usr/include/sched.h:44,\n from /usr/include/pthread.h:23,\n from /home/cyneo/Downloads/ACE_wrappers/ace/os_include/os_pthread.h:51,\n from /home/cyneo/Downloads/ACE_wrappers/ace/OS_NS_Thread.h:31,\n from /home/cyneo/Downloads/ACE_wrappers/ace/Guard_T.h:26,\n from /home/cyneo/Downloads/ACE_wrappers/ace/Free_List.cpp:7,\n from /home/cyneo/Downloads/ACE_wrappers/ace/Free_List.h:142,\n from /home/cyneo/Downloads/ACE_wrappers/ace/Malloc_T.h:26,\n from /home/cyneo/Downloads/ACE_wrappers/ace/Local_Name_Space.h:20,\n from Local_Name_Space.cpp:3:\n/usr/include/bits/cpu-set.h:42:3: nota: previous declaration as \xe2\x80\x98typedef struct cpu_set_t cpu_set_t\xe2\x80\x99\n } cpu_set_t;\n\nIn file included …Run Code Online (Sandbox Code Playgroud)