小编Art*_*kov的帖子

std :: this_thread :: sleep_for的实现取决于系统时钟

我遇到的问题是std::this_thread::sleep_for实际上使用系统时钟来计算唤醒时间(至少在Windows上),而不是稳定时钟。更改系统时钟时会产生问题。例如,如果我有一个等待周期短(例如50 ms)的等待循环,然后将系统时钟设置为2分钟,则该循环将停顿2分钟而不是50 ms。这是违反直觉的。我希望它是50毫秒(加上一些小偏差)。在任何其他情况下,如果可以在随机时间唤醒,则此功能没有意义。

关于sleep_for功能的文档说可以使用系统时钟,但是我想这是标准中的一个缺陷。至少应该选择要使用的时钟类型。或者(更好的)标准应该要求时钟稳定。

因此,考虑到这种缺陷,您是否知道其他任何与平台无关的方式可以在确定的时间内睡眠?

c++ windows c++11

5
推荐指数
0
解决办法
379
查看次数

模板推导/类型转换错误

我在模板扣除/类型转换方面遇到问题.以下代码无法编译:

template <typename Type>
struct A
{
    void DoA()
    {
    }
};

struct B : public A<B>
{
    void DoB()
    {
    }
};

template <typename T>
void DoSmth(const std::shared_ptr<A<T>> &p)
{
    p->DoA();
}

int _tmain(int argc, _TCHAR* argv[])
{
    std::shared_ptr<B> pb(new B);
    DoSmth(pb);

    //std::shared_ptr<A<B>> pa(pb);
    //DoSmth(pa);
    return 0;
};
Run Code Online (Sandbox Code Playgroud)

MSVC错误如下:

error C2664: 'void DoSmth<B>(const std::shared_ptr<A<B>> &)' : cannot convert argument 1 from 'std::shared_ptr<B>' to 'const std::shared_ptr<A<B>> &'
Binding to reference with added qualification
followed by
Call to constructor 'std::shared_ptr<A<B>>::shared_ptr<B,void>(const std::shared_ptr<B> …
Run Code Online (Sandbox Code Playgroud)

c++ templates type-conversion

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

标签 统计

c++ ×2

c++11 ×1

templates ×1

type-conversion ×1

windows ×1