我总是注意到人们对在UNIX中创建计时器的不同方式有不同的反应.
我知道在UNIX中每隔X秒执行一次事件的几种不同方法:
有人可以提供一些示例代码,使用"最佳"或最有效的方式来执行计时器,并说明为什么它是最好的?我想使用最有效的机制,但我不确定它是哪一个!
出于我们的目的,只是假装你正在打印"Hello World!" 每10秒一次.
注意:我没有TR1/Boost/etc.在这个系统上,所以请保持它直接进行C/C++和UNIX系统调用.对不起,第一次没有提到:)
您能否快速了解这4个关键字的用途以及原因?
我理解谷歌会在注册和易失性方面告诉你的基础知识,但想了解更多(仅仅是一个实用的概述).虽然做了相当低级的嵌入式系统代码,但是我从来没有找到过自己使用它们的理由,因此外部和明确地让我感到困惑.同样,我可以google但我更喜欢专家的快速,实用的总结,所以它坚持我的想法.
当我使用旧的API,例如Unix上的C套接字API时,我总是注意到在比较它们的错误返回值时,人们比<等于()更喜欢小于()==.
int result = send(...);
if (result < 0) { perror("..."); }
Run Code Online (Sandbox Code Playgroud)
在我所指的情况下,返回代码只是积极的0,或者-1(errno设置为正确的值).那么为什么不用(result == -1)而不是用来检查错误(result < 0)?
我问,因为我想知道这是出于习惯还是使用少于?的效率更高?我正在考虑这样一个事实:如果你比较两个uint64_ts并且你发现了MSB的差异,你就不必检查其他7个字节,等等.我可能会接触到这个逻辑!
我想使用std :: find_if来搜索我的地图中第一个在其值结构的特定元素中具有特定值的元素.我虽然有点困惑.我想我需要使用bind1st或bind2nd,但我并不认为这是正确的方法.
这是一些伪代码:
struct ValueType { int x, int y, int z };
std::map<int, ValueType> myMap;
... {populate map}
std::map<int, ValueType>::iterator pos = std::find_if(myMap.begin(), myMap.end(), <?>);
Run Code Online (Sandbox Code Playgroud)
所以,让我们说我想找到地图的第一个元素,其中ValueType的.x成员等于某个整数值(可以改变每个调用).
编写函数或函数对象来实现此目的的最佳方法是什么?我知道必须是一个一元谓词,这让我觉得我需要bind1st或bind2nd来提供我正在检查的整数值,但我不知道如何去做.自从我看到这些东西以来,已经太久了!> <
这有点类似于这个问题:
但我有一个不同的转折.假设我有一个只有一列的表格.列的名称是"title",它有一个唯一的约束.
首先,我插入一行title ="something".下次我尝试插入"某事"时,由于唯一的键约束(这很好),它将失败.我想做的是让它失败,并检查mysql提供的错误代码,以确保它由于唯一的键约束而失败.(即让数据库处理唯一性,我只是处理错误代码并在结果返回时告诉用户标题已经存在).
有没有办法做到这一点?
我正在使用一些遗留代码,我遇到了一个函数,它显然用于在任意长的字段上执行网络字节顺序转换(大于ntohl可以处理的).
我无法理解它是否足以告诉它是否正在执行除了在msg缓冲区范围内反转字节顺序之外的任何事情(或者即使它会可靠地执行此操作).有人可以帮助我分解并分析它,以便我可以用更易于理解的东西(或者至少评论它)替换它!
void swapit(unsigned char *msg, int length) {
for(;length>0;length--, msg++) {
*msg = ((*msg * 0x0802LU & 0x22110LU) |
(*msg * 0x8020LU & 0x88440LU)) *
0x10101LU >> 16;
}
}
Run Code Online (Sandbox Code Playgroud) 我最近(实际上仅在SO上)遇到了C/C++逗号运算符的使用.据我所知,它在左侧和右侧操作符之间的线上创建了一个序列点,以便您具有可预测(定义)的评估顺序.
我有点困惑为什么会在语言中提供这个,因为它似乎是一个可以应用于首先不起作用的代码的补丁.我发现很难想象它可以被使用的地方不是太复杂(并且需要重构).
有人可以解释这种语言功能的目的,以及它可以在实际代码中使用的位置(在合理范围内),如果有的话?
首先,它们之间的区别是什么:
(1) const char*
(2) char const*
(3) const char const*
Run Code Online (Sandbox Code Playgroud)
我相当肯定我完全理解这一点,但我希望有人给我一个句子,特别是,所以它坚持我的头脑.这是我很好的事情之一,直到有人把我放在现场,然后它变得模糊!
另外,编译器如何存储字符串文字?这不是家庭作业,我只是在C上面试,以防万一有人关心.
在阅读教科书中的内容后,我有点困惑.关于代码:
void doSomeWork(const Widget& w)
{
//Fun stuff.
}
doSomeWork(Widget(15));
Run Code Online (Sandbox Code Playgroud)
doSomeWork()拿一个const Widget&参数.教科书Effective C++ III指出,这会创建一个临时Widget对象以传递给doSomeWork.它说这可以替换为:
doSomeWork(static_cast<Widget>(15));
Run Code Online (Sandbox Code Playgroud)
因为两个版本都是强制转换 - 第一个版本只是一个功能风格的C版本.我原本以为Widget(15)会调用一个构造函数来获取一个整数参数.
在这种情况下是否会执行构造函数?
引自Jos Java Bloch的Effective Java - Second Edition
对于浮点字段,请使用Double.compare或Float.compare代替关系运算符,这些运算符在应用于浮点值时不遵守compareTo的常规协定.
它没有详细说明为什么会这样.
所以,我的问题是:
当与浮点值一起使用时,关系运算符以何种方式不遵守compareTo的一般约定?