草庐IT

non-local

全部标签

c++ - Mac OS X : is it possible to imbue a non-main thread to become "The Main Thread" of a process?

我在MacOSX(10.6.7)下遇到了与GUI/线程相关的问题。我正在使用wxWidgets框架(版本2.9.1),在我的例子中它依赖于Cocoa。应用设计是这样的:线程#1(又名“主线程”):进入main(),解析开关,并在必要时启动另一个线程(使用POSIX原语)。线程#2(又名“GUI线程”):使用wxEntry初始化wxWidgets并显示GUI。与大多数其他GUI框架一样,Cocoa不是线程安全的,因此我们确保在线程#2中执行所有GUI调用,并在需要时传递消息。然而,在这种特殊情况下,在初始化期间(从NSUndoManager更准确地说)从Cocoa内部提出了一个断言,本质

c++ - "non-virtual thunk to <method name>", 引用自 : Vtable for <classname>in <objectfile. o>

在Debug模式下编译时,我的xcode编译出现以下链接错误:"",referencedfrom:Vtableforin"non-virtualthunkto",referencedfrom:Vtableforin奇怪的是:它只出现在我的一个构建目标中(该代码的两个目标几乎相同),而且如果这些方法是在头文件而不是.cpp中定义的,那么它对两者都适用目标。所有这些方法都是纯虚拟的。发生这些错误的类继承自多个类,但只有其中一个会导致这些错误。有人知道导致此错误的原因吗? 最佳答案 遇到了同样的问题。当我们定义了一个虚拟成员函数(在.h头

c++ - 当调用带有警告 "control reaches end of non-void function"的函数时,会发生什么(实际上)?

我知道这条消息的含义,我只是想知道为什么它不是错误消息,而只是警告?在这种情况下会发生什么?例如,假设我有一个函数intf(){}当我调用它时会发生什么?在这种情况下,编译器是否添加了“未初始化”int的返回?或者缺少返回可能会导致堆栈损坏?或者它(绝对)未定义的行为?用gcc4.1.2和4.4.3测试编辑:阅读答案我明白一件事,阅读评论-另一件事..好的,让我们总结一下:这是未定义的行为。那么,这意味着可能导致堆栈损坏,对吗?(这甚至意味着,我的电脑可能开始通过麦克风插孔向我扔烂番茄,尖叫着——“你做了什么???”)。但如果是这样,那么为什么这里的最高答案说,堆栈损坏不会发生,同时行

c++ - "local variables at the outermost scope of the function may not use the same name as any parameter"是什么意思?

我一直在阅读C++入门第5版。在第6.1章功能参数列表的第三段中。它写道“此外,函数最外层范围内的局部变量不得使用与任何参数相同的名称”。什么意思?我不是以英语为母语的人。我不明白函数的“最外层范围”的实际含义。 最佳答案 函数的最外层是定义函数体的block。您可以将其他(内部)block放入其中,并在该block的本地变量中声明变量。内部block中的变量可以与外部block中的变量或函数参数具有相同的名称;他们将名称隐藏在外部范围内。外部block中的变量不能与函数参数同名。演示:voidf(inta)//functionha

c++ - TLS 变量上的 "illegal thread-local reference to regular symbol"错误

我在链接过程中出现了一个奇怪的问题。我有一个包含以下定义的头文件foo.hpp:structFoo{static__threadintx;}以及引用该变量plugin.cpp的源文件:#include"foo.hpp"voidbar(){inty=Foo::x;}它编译得很好:$CXX-stdlib=libc++-std=c++11-fvisibility=hidden-fPIC-oplugin.cpp.o-cplugin.cpp但是当我尝试链接为动态库时:$CXX-stdlib=libc++-std=c++11-fvisibility=hidden-dynamiclib-Wl,-un

c++ - std::locale/std::facet 关键部分

出于好奇。在过去,我曾看到像boost::to_lower这样的函数的性能下降,因为std::use_facet中使用了CriticalSection,当懒惰时分面已分配。据我所知,在语言环境中存在全局锁定错误,但根据StephanLavavej的说法,它已在VS2013中修复。瞧,我昨天看到这个锁在刻面杀死服务器性能上,所以我想我混淆了两个不同的问题。但是首先,为什么在惰性方面有一个CriticalSection?显然它会破坏性能。为什么他们没有解决某种可升级的锁或指针上的原子操作? 最佳答案 MSVC++的std::locale

Visual Studio 11 中的 c++11 thread_local 关键字支持

所以有一个listofc++11featuressupportedbyvisualstudio.thread_local支持被标记为部分。我无法在这里找到对部分支持的确切含义的解释。他们只是别名__declspec(thread)吗?我可以只使用boost::thread_specific_ptr,但似乎有一些报告boost::thread_specific_ptrisslow.这可能是真的,也可能不是。具体来说,我想要最新的linux+gcc和windows+msvc上的x86/x64上的快速TLS。快速意味着尽可能不进行系统调用(我认为这对于上述平台是可能的。)

TwoSampleMR:local clump(MR-Base exceeded 300 seconds) 包括Windows和Linux R解决办法

首先是Windows一个做孟德尔随机化的过程遇到的报错:bmi_exp_datPleaselookatvignettesforoptionsonrunningthislocallyifyouneedtorunmanyinstancesofthiscommand.ClumpingC5nTuK,5340156variants,usingEURpopulationreferenceErrorinapi_query("ld/clump",query=list(rsid=dat[["rsid"]],pval=dat[["pval"]], :  ThequerytoMR-Baseexceeded300se

java - JNI 错误 : Local reference table overflow 512 entries

我的函数如下所示。它被执行了很多次。在某些时候它在jobjectnvarObject=env->GetObjectField(var1,nvar1)崩溃,给出错误JNI错误:本地引用表溢出512个条目。任何人都可以研究这个问题并提出一些启示。 最佳答案 所有返回jobject或类似对象引用的JNI方法都在引用表中创建本地引用。当您将控制权交还给JVM时,这些引用会自动清理,但如果您要创建许多引用(例如,在循环中),则需要手动清理它们。您在cls引用上调用DeleteLocalRef是正确的,但请注意GetObjectField也返回

C++11:GCC 4.8 静态 thread_local std::unique_ptr 未定义引用

我需要为将通过宏访问的每个线程存储一个唯一指针。我想我应该用一个单例和静态thread_localstd::unique_ptr对象来解决这个问题。这是代码的简化版本:main.cpp#include#include#include#includeusingnamespacestd;#include"yay.hpp"mutexcoutMutex;voidyay(intid){int*yayPtr=getYay();//IknowthisisbadcoutMutex.lock();couthappy;for(inti=0;i耶.hpp#ifndefBE_HAPPY#defineBE_HA