草庐IT

Tread多线程

全部标签

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的线程模型,但在幕后它们是相当复杂的野兽。这有利也有弊。缺点是,很简单,它们比其他形式的线程间同步和通信更慢,并且有更多限制。对于初

windows - 设备驱动程序 IRQL 和线程/上下文切换

我是Windows设备驱动程序编程的新手。我知道某些操作只能在IRQLPASSIVE_LEVEL执行。例如,Microsoft有关于如何从内核驱动程序写入文件的示例代码:if(KeGetCurrentIrql()!=PASSIVE_LEVEL)returnSTATUS_INVALID_DEVICE_STATE;Status=ZwCreateFile(...);我的问题是:是什么阻止了在上面的KeGetCurrentIrql()检查之后引发IRQL?假设发生上下文或线程切换,当它返回到我的驱动程序时,IRQL会不会突然变为DISPATCH_LEVEL,然后导致系统崩溃?如果这不可能,那么

windows - C# 当托管线程结束其时间片时,它会引发上下文切换吗?

在Russinovich的书中它说线程(注意:这是关于OS线程)将需要分派(dispatch)(调度)如果它a)准备好b)结束它的时间片、产量或block。我的C#实时应用程序中有一个托管线程,对于实现尽可能少的上下文切换非常重要。此线程具有最高优先级,进程具有实时优先级,这使得我的线程操作系统优先级为31中的26。当我的线程结束其时间片并且没有优先级>=26的等待线程时,我的线程会发生什么?是否会有上下文切换来重新安排我的线程再次运行,或者将避免上下文切换并且线程将不间断地运行?如果有上下文切换-谁能告诉平均需要多少CPU周期?我希望得到简单且明确的答案!谢谢!

.net - WPF Set Owner on Window 在自己的专用 UI​​ 线程上创建

我有以下代码,它在它自己的专用UI​​线程上运行WPF窗口://CreatethededicatedUIthreadforAddEditPairwindowThreadaddEditPairThread=newThread(()=>{//InitialisetheaddeditpairwindowaddEditPair=newAddEditPair(this);addEditPair.PairRecordAdded+=newEventHandler(addEditPair_PairRecordAdded);addEditPair.PairRecordEdited+=newEventHa