草庐IT

多线程、Handler机制、ThreadLocal

全部标签

C++互斥锁定线程优先级

我希望为一个线程赋予优先级,这样如果两个线程都在等待互斥锁,那么优先级最高的线程将始终在优先级较低的线程之前获取互斥锁。一位同事建议我应该通过更改线程的线程优先级来实现这一点。我尝试使用SetThreadPriority()函数将一个等待线程设置为0(正常),将另一个设置为2(最高),但这并没有像我希望的那样影响互斥行为。锁当前总是转到请求所有权的第一个线程。那么这种行为正常吗?跟我同事的想法相反?有没有其他方法可以赋予我可能缺少的线程优先级?还是我正在寻找更复杂的问题来解决? 最佳答案 线程优先级表示线程在CPU上占用的时间由调度

c++ - GetSystemInfo 是否为您提供虚拟 CPU 的总数(即超线程)?

GetSystemInfo会给你物理CPU/内核的数量,但我想知道虚拟CPU的总数。IE。在新的Nahelam芯片上,它们有4个内核,但显示为8个cpu。如果GetSystemInfo没有给出这个信息,我需要什么API(我见过一个获取逻辑处理器数量的函数,但它只适用于Vista。我需要支持XP)? 最佳答案 GetLogicalProcessorInformation功能(WindowsVista、WindowsXPProfessionalx64Edition、WindowsXPwithSP3)

c++ - RegSetValueEx 线程安全吗?

我怀疑RegSetValueEx是线程安全的,但希望得到社区的一些确认。如果多线程调用,会不会有副作用?RegSetValueExMSDNdocumentation根本没有提到线程安全。 最佳答案 相关Q:IstheWin32Registry‘threadsafe’? 关于c++-RegSetValueEx线程安全吗?,我们在StackOverflow上找到一个类似的问题: https://stackoverflow.com/questions/2847488

c++ - 多线程 Win32 C++ 程序在多线程中使用 try/catch 时崩溃

我正在编写一个多线程程序,它会在抛出特定异常时崩溃。剥离了越来越多的代码来查找问题后,我现在只剩下一个极其简单的案例,它会导致许多不同的崩溃之一,似乎是随机的。我不知道为什么要这样做。程序的全部内容如下:#includeWINAPIDWORDthreadFunc(LPVOIDx){while(true){try{throw1;}catch(...){}}return0;}intmain(intargc,char*argv[]){CreateThread(NULL,0,threadFunc,NULL,0,NULL);CreateThread(NULL,0,threadFunc,NULL,

windows - 运行非线程安全 Dll 的多个 'instances'?

我有一个dll的源代码还不是线程安全的。dll相当复杂,需要相当长的时间才能使其线程安全。所以我想出了独立运行Dll的几个“副本”的想法。最简单的方法可能是创建N个重命名的Dll副本并为每个线程加载一个单独的Dll。这是可行的解决方案吗?有没有更好的类似方法?是否可能存在一些包装代码?我知道这根本不是一个好的工程解决方案。请不要怪我。但它可能会解决许多问题。编辑2017我已经做到了,而且没有任何问题。伟大的!但请注意以下几点:http://msdn.microsoft.com/en-us/library/2s9wt68x%28v=vs.80%29.aspx如果DLL将任何非本地数据或对

Python:进程/线程监控

目前我可以用一个简单的python脚本列出我的进程:导入操作系统os.system("任务列表")我想列出与这些进程关联的所有线程(如果有的话)。每个进程的线程数可能就足够了。谁能告诉我在哪里可以找到这些信息。谢谢。 最佳答案 您可以使用psutil模块(downloadhere)用于跨平台过程信息传递。安装后,使用以下代码获取任意进程id的线程数。importpsutilforprocinpsutil.process_iter():printproc.name+'['+str(proc.get_num_threads())+'th

windows - 程序完成执行后的线程状态

主线程执行完毕后,内部线程会发生什么?例如:程序1创建5个线程在后台运行。程序1崩溃。这些线程还活着吗?他们会因为线程绑定(bind)在进程上下文中而被杀死吗? 最佳答案 所有这些资源都链接到流程数据结构。当进程终止时,Windows确保清理所有资源。没有设法找到对文档的引用[请随意添加一些,我确信我在M.Russinovich的“WindowsInternals”一书中读到了这篇文章],但这里有几个关于内存释放的类似答案。线程清理是进程终止时Windows调用的清理例程的一部分。https://stackoverflow.com/

c++ - 在不同的线程上解除分配 BSTR 是否安全?

如果我在一个线程上调用一个返回BSTR的COM方法,那么从另一个线程?COM调用完成后,我将不再在第一个线程上使用BSTR,因此应该不会有任何并发​​问题。但是考虑到COM与线程的关系,我不确定SysFreeString()是否依赖于在同一线程上分配的BSTR。示例代码:BSTRvalue=nullptr;HRESULThr=pComObject->DoSomething(&value);if(FAILED(hr)){returnhr;}std::threadt([value]{//dosomethingwithvalueSysFreeString(value);});t.detach

c++ - 加载的 OpenGL 函数是上下文特定的还是线程特定的? ( Windows )

考虑一个场景,其中2个渲染上下文(每个都属于它们自己不同的窗口)存在于2个独立的执行线程中。OpenGL函数指针是否需要分别加载和使用?或者gl*函数指针可以是全局的,只为给定的应用程序实例加载一次并由两个窗口或上下文使用吗?我问的原因是因为OpenGLFunctionLoadingDocs,在谈到加载wgl函数时,指出:ThisfunctiononlyworksinthepresenceofavalidOpenGLcontext.Indeed,thefunctionpointersitreturnsarethemselvescontext-specific.TheWindowsdoc

windows - 多线程:事件驱动与消息驱动

用win32事件对象(CreateEvent)或线程窗口消息队列开发多线程时,性能有差异吗?两者都应该使用某种WaitFor...调用。我自己的代码几乎完全基于事件,但如果不使用消息,我可能会丢失一些东西。 最佳答案 如果您担心线程消息和内核事件之间的性能差异,那么您可能不应该使用线程消息。Win32线程消息队列是一种最初为Windows16开发的机制——当时还没有线程。它们已经发展到可以处理Win32的线程模型,但在幕后它们是相当复杂的野兽。这有利也有弊。缺点是,很简单,它们比其他形式的线程间同步和通信更慢,并且有更多限制。对于初