草庐IT

lock_wrapper

全部标签

android - 我应该用什么替换 SCREEN_DIM_WAKE_LOCK?

我目前正在使用下面引用的代码对警报通知Activity进行唤醒锁定。但是,SCREEN_DIM_LOCK已贬值。那么,我应该用什么来代替它?//InstanceofwakelockforAlarmActivityPowerManagerpm=(PowerManager)this.getSystemService(Context.POWER_SERVICE);wakeLock=pm.newWakeLock(PowerManager.SCREEN_DIM_WAKE_LOCK,"MyWakeLock"); 最佳答案 Android开发者文

c++ - C++0x 中的完美转发是否会使 reference_wrapper 被弃用?

像往常一样,先写代码:#includeusingnamespacestd;usingnamespacestd::tr1;voidf(int&r){r++;}templatevoidg1(Ff,Pt){f(t);}templatevoidg2(Ff,P&&t){f(forward(t));}intmain(){inti=0;g1(f,ref(i));//oldway,uglywayg2(f,i);//newway,elegantway}在C++98中,我们没有一个很好的方法来通过模板函数来完善前向参数。因此,C++专家发明了ref和cref来实现这一目标。既然我们有了r值引用和完美转发,

c++ - try_lock_for 未按预期工作

我正在摆弄一些C++中的代码,由于某种原因不想工作,我将它缩小到这种情况:#include#include#include#include#includeusingnamespacestd;voidtest(){timed_mutexm;m.lock();std::cout问题是test()根本不会阻塞,即使try_lock返回false。有没有我忽略的东西,或者这是gcc中的错误,或者我接下来应该去哪里找出问题所在?感谢任何建议和帮助!我像这样编译了这个小程序:g++-pthread-std=c++11threads.cpp-othreads如果有任何帮助,这是gcc和我的操作系统的

c++ - unordered_set<reference_wrapper<Ty>> 有效吗?

这是有效的C++(考虑到最新标准)吗?我在Ubuntu12.04上遇到了near-top-of-treeclang/libc++的编译错误。如果它应该是有效的,我会邮寄带有错误消息等的clang-dev列表。#include#includestructX{inti;};voidf(){std::unordered_set>setOfReferencesToX;//DostuffwithsetOfReferencesToX}**顺便说一句,我厌倦了限定问题/答案是特定于最新标准的。C++社区作为一个整体,是否可以开始限定特定于旧标准的内容?较新的标准已经发布了大约一年。

c++ - 将 boost::shared_lock 升级为独占锁

谁能解释一下boost::upgrade_lock的正确用法。以下代码导致死锁//Globaltypedefboost::shared_mutexMutex;typedefboost::shared_lockReadLock;typedefboost::upgrade_lockUpgradeLock;typedefboost::upgrade_to_unique_lockWriteLock;MutexsharedMutex;//Multithreadedreaderandwriter{ReadLockread(sharedMutex);for(intii=0;ii如果我在升级前用rea

c++ - 如何将 std::vector<std::reference_wrapper<T>> 转换为 std::vector<T>

我有一个本地std::vector>现在我想返回其元素的真实拷贝(即std::vector)。有没有比循环更好的方法?例子:std::vectorfoobar(){std::vector>refsToLocals;/*dosmthwithrefsToLocals*/std::vectorcopyOfLocals;for(autolocal:refsToLocals)copyOfLocals.insert_back(local.get());returncopyOfLocals;} 最佳答案 看来,最明显的方法是构造一个std::ve

c++ - 如何在 std::pair 中返回 std::lock_guard

当我从函数返回std::pair中的std::lock_guard时,我遇到了可怕的错误。但是当我将它打包在一个类中时,我没有任何问题(按预期编译和工作)。我不明白为什么。详情如下:我设计了一个小模板类来方便地锁定和解锁共享对象。它不是特别创新,但C++17允许它非常紧凑并且代码读/写友好:templateclassLocked{public:Locked(T&_object,std::mutex&_mutex):object(_object),lock(_mutex){}T&object;std::lock_guardlock;};templateclassLockable{publ

c++ - std::reference_wrapper 的大小有任何保证吗?

考虑这样一种情况,我有足够的存储空间来托管void*,因此可以就地构造一个指针。是否可以保证相同的存储空间足够大以始终存储std::reference_wrapper?有点(出于我的想法,只是为了理解我的意思):std::aligned_storage_tstorage;//...intvalue=0;new(&storage)std::reference_wrapper{value};从快速而肮脏的测试中,我发现在我的机器上这是有效的,即std::reference_wrapper的大小适合void*。但是,在不同的平台上可能会出现这种情况。同时,我在标准中找不到关于std::ref

c++ - 为什么 std::move 对 std::unique_lock 没有任何影响?

我有以下C++(11)代码:#includevoidunlock(std::unique_lock&&ulock){}intmain(void){std::mutexm;std::unique_lockulock(m);unlock(std::move(ulock));if(ulock.mutex()==&m||ulock.owns_lock()){throwstd::runtime_error("");}return0;}我想不通的是为什么在unlock()返回后互斥体仍然被持有。我的期望是std::move()导致锁在从unlock()调用返回时超出范围(并被析构函数解锁).至少,

c++ - 性能 : typedef vs wrapper class for primitive types?

我想在C++中定义一个新类型,它只是一些原始类型(在我的示例中,int可以是任何类型)。在此示例中,我将类型称为NodeId。我可以只使用typedefintNodeId。我想要NodeId的默认值,所以我会使用#defineNULL_NODE_ID-1。现在,我认为定义一个类而不是typedef会更好,以允许函数isValid()和构造nullNodeId的默认构造函数:classNodeId{intvalue;public:inlineNodeId():value(-1){}inlineNodeId(intvalue):value(value){}inlineoperatorint