草庐IT

DLL_THREAD_ATTACH

全部标签

c++ - std::thread 并在 visual studio 2013 中 move

我有一个只能move的类和一个按值获取此类对象的函数。在新线程中调用函数:voidfoo(MyClassa){}intmain(){MyClassa;std::threadt(&foo,std::move(a));}我得到一个编译器错误,因为缺少MyClass的复制构造函数(我删除了他),如果我实现他,复制构造函数就会被调用。显然这是一个错误,它在gcc中编译时没有复制构造函数。有什么解决方法吗? 最佳答案 如果方法需要a的所有权,通过堆传递它,最好是在shared_ptr中:voidfoo(std::shared_ptra){}[

c++ - Visual Studio 2013 dll 导出链接错误 (LNK2019/LNK1120)

我知道之前有人问过类似的问题,但看起来在类导出方面与简单函数有所不同......我已经检查了所有这些解决方案,检查了所有建议,但看起来我仍然是遗漏了一些东西......发生了什么:我有一个用VisualStudio2013编写的主C++项目,我想添加一个包含各种实用程序的dll库。我创建了一个虚拟的,基本上没有任何功能,但它无法编译:2>TestSvc_i.c2>TestSvc.obj:errorLNK2019:unresolvedexternalsymbol"__declspec(dllimport)public:__thiscallCUtils::CUtils(void)"(__i

python - 在 python 中使用 cpp 项目 dll 和 .lib 文件

因此,使用标准的cpp编译器,我的应用程序链接到.lib文件,然后在运行时,只要dll与可执行文件位于同一文件夹中,一切都神奇地工作..但是在python中,.lib文件起什么作用呢?我知道您可以通过使用ctypes来使用dll的功能fromctypesimport*dllHandle=cdll.LoadLibrary("C:\\filename.dll")orctypes.WinDLL("C:\\filename.dll")但是不使用.lib文件会丢失什么?如果不需要,为什么在cpp项目中需要它? 最佳答案 如果在test.dll

c++ - boost::thread 应用程序,奇怪的数据竞争报告

我编写了一个boost::thread应用程序,其中我可能有一些基于valgrind/helgrind报告的竞争条件。我想确定这些比赛的原因。程序是:#includeboost::mutexmyMutex;boost::condition_variablemyConditionalVariable;boolfunctionWasRun=false;voidfunction(){{boost::lock_guardlock(myMutex);functionWasRun=true;}myConditionalVariable.notify_one();//doSomething1();}

c++ - 通过外部信号停止 std::thread 的有效方法是什么?

这是一段无法按设计工作的代码,请向我解释这里出了什么问题(简化代码以使其更具可读性)。shm_serverserver;std::threads{server};//somework...std::cout看起来我为shm_server类的另一个拷贝调用了一个stop方法。因为stop()仅将std::atomic_booldone;(shm_server成员)设置为true但我看到了线程函数(这是shm_server的operator())仍然看到done等于false。std::thread只有移动构造函数?在这种典型情况下,如何正确地向服务器发送信号?classshm_serve

c++ - 按需条件 std::atomic_thread_fence 获取的优缺点?

下面的代码显示了两种通过原子标志获取共享状态的方法。读取器线程调用poll1()或poll2()来检查写入器是否已发出标志。投票选项#1:boolpoll1(){return(flag.load(std::memory_order_acquire)==1);}投票选项#2:boolpoll2(){intsnapshot=flag.load(std::memory_order_relaxed);if(snapshot==1){std::atomic_thread_fence(std::memory_order_acquire);returntrue;}returnfalse;}请注意,选

c++ - 将结构传递给 dll

我想将几个数据传递给Dll函数,所以我正在考虑创建一个结构并通过如下结构将它们传递给Dll函数:structoptions{intop1,intop2,intop3,char*op4,...char*op10}voiddllFunction(optionsmyOptions)无论开发工具是什么,dll都应该以在Windows平台上工作的方式实现,我想知道:这样发送数据有效吗?请注意,结构成员都是基本的c类型(int、float、double、...)。为什么我担心它?如您所知,不同的编译器以不同的方式实现std类,因此您不能通过dll边界传递std类,但我不确定是否所有编译器都以相同的

c++ - 读取dll文件中的文本文件

设置MicrosoftVisualStudioProfessional2015,在Windows10Pro上运行Unity5.3.1f1(x64)该项目建立在Unity在其site.上提供的示例项目之上。该项目可以找到here.需要做的事情我正在考虑创建一个用于Unity的opengl插件(以dll的形式)。在他们的示例代码中,vertex和fragment着色器在代码中是硬编码的,如下所示:#defineVPROG_SRC(ver,attr,varying)\ver\attr"highpvec3pos;\n"\attr"lowpvec4color;\n"\"\n"\varying"l

c++ - 你能在第 3 方 dll 中使用 std::string 吗?

我一直在寻找我的问题的答案,但似乎大多数人都对跨.dll边界传递std::string感兴趣。但我更感兴趣的是在我正在创建的.dll中的类中使用std::string。我正在向论坛上的一群人发布我的.dll(通过电子邮件发送),所以我的问题是你可以在.dll中使用std::string而没有像编译器需要相同这样的限制,版本,CRT需要相同等。你能举例说明什么是不安全的,什么是安全的吗?示例:“下载器”使用SetSender函数是否安全?邮件.hclass_declspec(dllexport)Mail{structENVELOPE{std::wstringSenderEmail;//S

c++ - malloc_trim(0) 释放 Thread Arenas 的 Fastbins?

在过去一周左右的时间里,我一直在调查内存使用量随时间累积的应用程序中的问题。我将其缩小到复制astd::vector>>>>>在工作线程中(我意识到这是一种组织内存的荒谬方式)。定期地,工作线程被销毁、重新创建,并且该线程在启动时复制该内存结构。复制的原始数据通过引用从主线程传递到工作线程。使用malloc_stat和malloc_info,我可以看到当工作线程被销毁时,它正在使用的arena/heap在它的fastbins空闲列表中保留了用于该结构的内存。这是有道理的,因为有许多小于64字节的单独分配。问题是,当工作线程被重新创建时,它会创建一个新的arena/heap而不是重复使用