无法编译 C++ std::shared_timed_mutex.try_lock_for()

SJH*_*owe 0 c++ mutex

使用VS2017

我正在尝试使用 std::shared_timed_mutex ,特别是成员函数 try_lock_for 。我试图将超时指定为 100 毫秒。

现在在 Alan Birtles 的帮助下进行编辑。我现在有

#include <chrono>                   // for std::chrono
#include <shared_mutex>             // for std::shared_timed_mutex
#include <iostream>                 // for std::cerr

static std::shared_timed_mutex   SHMutex;

void testfunc()
{
          using duration2 = std::chrono::duration<_int64, std::milli>;
          // WAS using duration2 = std::chrono::duration<_int64, std::chrono::milliseconds>;
        const duration2 dur(100);
        if (!SHMutex.try_lock_for(dur))
            std::cerr << "Lock failure for SHMutex" << '\n';
}
Run Code Online (Sandbox Code Playgroud)

无论我做什么,Visual Studio 都会抱怨 dur 实例化错误的编译错误。我必须做什么才能使其正常工作?

编译错误现在为零。艾伦·伯特尔斯的回答改变了一切

Ala*_*les 5

using duration2 = std::chrono::duration<_int64, std::chrono::milliseconds>;
Run Code Online (Sandbox Code Playgroud)

没有意义,第二个模板参数duration是一个比率,但是std::chrono::milliseconds是一个持续时间。使用以下任一方法:

using duration2 = std::chrono::duration<_int64, std::milli>;
Run Code Online (Sandbox Code Playgroud)

或者更简单:

using duration2 = std::chrono::milliseconds;
Run Code Online (Sandbox Code Playgroud)

在大多数平台上这将是类似的(定义的表示std::chrono::milliseconds参见signed integer type of at least 45 bitshttps://en.cppreference.com/w/cpp/chrono/duration )