问题描述
你好,我正在做一些简单的线程运动,我希望我的t1睡眠2秒,但是我遇到了这个错误:无法找到数字文字运算符“ operator”” s
那怎么可能?
public class ResetManagerAutofacModule : Module
{
protected override void AttachToComponentRegistration(
IComponentRegistryBuilder componentRegistryBuilder,IComponentRegistration registration)
{
registration.Activated += (sender,e) =>
RegisterToResetManager(e.Instance,e.Context);
}
protected override void Load(ContainerBuilder builder)
{
builder.RegisterType<ResetManager>().As<IResetManager>().SingleInstance();
// Because there are no module events for the end-of-lifetime of objects,// we use a disposable class as a helper to get informed about disposal
// (declaration see below):
builder
.RegisterType<DisposeObserver>()
.InstancePerDependency(); // important!!!
}
private void RegisterToResetManager(object instance,IComponentContext context)
{
var resettable = instance as IAutoRegisteredResettable;
if (resettable == null)
return;
var resetManager = context.Resolve<IResetManager>();
// Hook the object on the manager:
resetManager.RegisterInstance(resettable);
// Get a new instance of our dispose helper class from the container
// which has the same lifetime as "instance" because DisposeObserver
// is registered as InstancePerDependency.
var disposableWithCallback = context.Resolve<DisposeObserver>();
// When this helper is disposed,we know that the lifetime of "instance" is over.
disposableWithCallback.DisposingCallback =
// So we can unhook it from the manager:
() => resetManager.UnregisterInstance(resettable);
}
public class DisposeObserver : IDisposable
{
public Action DisposingCallback { get; set; }
public void Dispose()
{
DisposingCallback?.Invoke();
DisposingCallback = null;
}
}
}
解决方法
来自https://en.cppreference.com/w/cpp/symbol_index/chrono_literals:
这些运算符在命名空间
std::literals::chrono_literals
中声明,其中literals
和chrono_literals
都是内联命名空间。可以使用using namespace std::literals
,using namespace std::chrono_literals
和using namespace std::literals::chrono_literals
来访问这些运算符。
因此,只需将using namespace std::literals::chrono_literals;
添加到文件中,就可以了。
编辑:
无论上述问题如何,您都在错误地构造线程t2
和t3
。代替接受std::thread&
作为参数的lambda,您可能打算通过引用将其捕获到lambda中,如下所示:
std::thread t1(printt1,1);
std::thread t2([&t1]() { t1.join();std::cout << 2<<std::endl; });
std::thread t3([&t2]() { t2.join();std::cout << 3<<std::endl; });
t3.join();