小编woo*_*tar的帖子

NTP Clock Discipline如何运作?

我正在阅读NTPv4 rfc以更好地理解ntp使用的机制.所以,基本的想法似乎很简单.但我对NTP Clock Discipline如何工作有点困惑.

在NTPv4中,它表示混合PLL/FLL用于训练时钟.根据我的理解 - PLL锁定服务器阶段并在更新间隔调整客户端时钟.FLL锁定时钟频率并以更新间隔调整客户端时钟.

它还说如果有更多的网络抖动(延迟尖峰),如果时钟漂移是问题(不同的时钟频率/漂移),FLL工作得更好,PLL工作得更好

我可以理解使用反馈控制来调整它们,也可以从NTP rfc中包含的图表中了解它们是如何工作的.但是,任何人都可以解释NTP如何仅从服务器收到的数据包中实现FLL/PLL混合时钟规则?

如果有人能够解释它背后的逻辑,那将是很棒的.

logic rfc ntp

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

一个模板函数,可以接受任何类型的两个列表

我正在尝试并尝试创建一个接受两个列表的函数:一个浮点列表,一个整数列表.我的第一个方法是:

template<typename FloatIterator, typename IntIterator>
Thing *createThing(
   FloatIterator floatsBegin,
   FloatIterator floatsEnd,
   IntIterator intsBegin,
   IntIterator intsEnd
) {
   ...
}
Run Code Online (Sandbox Code Playgroud)

这适用于各种容器,甚至是普通的指针.但是,我无法轻松传入std :: initializer_list.例如,我希望能够像这样调用函数:

Thing *thing = createThing({ 3.0, 4.0, 5.0 }, { 0, 1, 2, 2, 3, 0 });
Run Code Online (Sandbox Code Playgroud)

所以我在想,我会尝试这样的事情:

template<typename FloatContainer, typename IntContainer>
Thing *createThing(const FloatContainer &floats, const IntContainer &ints) {
    for (float f : floats) { ... }
    for (int i : ints) { ... }
}
Run Code Online (Sandbox Code Playgroud)

这适用于stl容器和initializer_lists,但它不再适用于简单的指针.我不能再这样做了:

int numFloats;
float *floats = readFloatsFromFile(&numFloats, "myfloats.txt");

int numInts;
int *ints …
Run Code Online (Sandbox Code Playgroud)

c++ initializer-list c++11

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

将代码从C++ 03迁移到C++ 11:我应该对隐式默认移动构造函数保持谨慎吗?

我有一个代码库,我想从C++ 03切换到C++ 11.

据我所知,一些类将通过隐式默认移动构造函数(以及随之而来的移动赋值运算符)从更改中受益.虽然我对此完全没问题(我甚至认为这是一件好事)但我有点害怕这些隐式构造函数可能对我所拥有的一些非可复制类产生的影响.

我拥有的一个例子是一个包含iconv_t句柄libiconv以利用RAII的类.

更明确地说,课程如下:

class iconv_wrapper
{
   public:
     iconv_wrapper() : m_iconv(iconv_open()) {}
     ~iconv_wrapper() { iconv_close(m_iconv); }
   private:
     // Not implemented: non copyable. Should probably be = delete; in C++11.
     iconv_wrapper(const iconv_wrapper&);
     iconv_wrapper& operator=(const iconv_wrapper&);

     iconv_t m_iconv;
};
Run Code Online (Sandbox Code Playgroud)

我担心的是:如果这个类的实例碰巧被移动,这将导致双重调用iconv_close().作为iconv_t一个"哑"整数类型,我不希望默认实现iconv_wrapper(iconv_wrapper&&)使m_iconvR值的成员无效.即使它确实如此,也没有实现析构函数来正确处理它.

所以我的问题是:

  • 我的担忧是否合法?我是对的,在这种情况下,默认的可移动构造函数/运算符=是不正确的吗?
  • 我可以对C++ 11很好地移植这段代码做些什么改变?(我被建议,std::unique_ptr但我不能很好地工作,因为它需要一个指针,而不是一些不透明的类型)

c++ c++11 c++03

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

recv(...)是这样运作的吗?

我将套接字的超时设置SO_RCVTIMEO为10秒.此问题特定于流套接字(TCP).当我recv(...)从手册页中收集的内容打电话时,这就是我所期待的:

  1. 如果远程关闭连接,则无论超时如何,它都会立即返回0.
  2. 如果超时,并没有收到数据,那么我们得到一个返回-1和errnoEAGAINEWOULDBLOCK.
  3. 如果套接字上发生错误,它会立即返回-1,然后errno设置正确.
  4. 如果数据可用,套接字将等待,直到超时发生,然后再返回.这次它将在10秒内返回,并收到总字节数.

这是正确的行为吗?我只是想确保我正确理解文档.

谢谢!布雷特

c sockets posix recv

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

在Zend Framework 2的SQL查询中使用case/when/then

我有疑问:

SELECT user_name, group_id,
       CASE WHEN col_1 = 1 THEN 0 
            WHEN col_2 = 1 THEN 1 
            WHEN col_3 = 1 THEN 2 
       END as merge_col
FROM some_table
WHERE group_id = 10
ORDER BY merge_col.
Run Code Online (Sandbox Code Playgroud)

如何使用ZF2Zend\..\Sql,我可以实现这个查询吗?

更新:

感谢谁试图帮助我.它的工作如下:

$select->columns(array(
            'user_name', 
            'group_id', 
            'merge_col' => new Expression('CASE WHEN col_1 = 1 THEN 0 
                     WHEN col_2 = 1 THEN 1 
                     WHEN col_3 = 1 THEN 2 END')))
->where (array('group_id'=> 10))
->order ('merge_col');
Run Code Online (Sandbox Code Playgroud)

有更好的答案吗?

谢谢.

sql zend-db zend-framework2

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

如何获取std :: map中的元素数(无符号长)?

如何获取std :: map中的元素数(无符号长)?

假设您有一个这样的对象:

std::map<unsigned long, someClass *> myNightmare;
Run Code Online (Sandbox Code Playgroud)

我一直在尝试找出如何获取其元素数量。您会看到,我需要此数字为无符号长号,仅执行此操作似乎并不正确:

unsigned long count = myNightmare.size();
Run Code Online (Sandbox Code Playgroud)

那么如何获得无符号long的元素数呢?

c++ std map

3
推荐指数
1
解决办法
3968
查看次数

变量名后的星号(*)在opengl中意味着什么?

我在一个我正在研究的来源中看到这一行,但似乎找不到任何与"变量后的星号"或"星号前的变量"相关的内容.这是什么意思?

GameDrawer* gameDrawer;
Run Code Online (Sandbox Code Playgroud)

GameDrawer也用作函数和类的名称.

opengl pointers class function

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

strtok函数和多线程

我读了很多关于 strtok(c​​har* s1, char* s2) 及其实现的内容。但是,我仍然不明白是什么使它成为在多线程程序中使用的危险函数。有人可以给我一个多线程程序的例子并解释那里的问题吗?请注意,我正在寻找一个可以向我展示问题所在的示例。

ps:strtok(c​​har* s1, char* s2) 是C 标准库的一部分。

c multithreading

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