草庐IT

TerminateThread

全部标签

c++ - 如何正确终止 dll 中的挂起线程?

大家好,我有一个包含错误的第三方库。当我调用一个函数时,它可能会挂起。库函数在dll中被调用。我决定将调用移到线程中并等待一段时间。如果线程完成,则确定。如果不是——我应该强制终止它。此处的简化示例:unsignedCounter=0;voidf(){HANDLEhThread;unsignedthreadID;//Createthesecondthread.hThread=(HANDLE)_beginthreadex(NULL,0,DoSomething,NULL,0,&threadID);if(WAIT_TIMEOUT==WaitForSingleObject(hThread,50

c++ - 清理DLL : _endthreadex() vs TerminateThread()中的线程

由于restrictionsonDllMain(我知道这对DLL中的全局和静态对象构造函数和析构函数同样适用),像带异步文件写入/刷新线程的单例记录器这样的简单事情变得太棘手了。单例记录器位于DLL中,并且对可执行文件的加载和卸载时的影响有限。我可以强制该可执行文件在使用前调用它的DLL初始化函数,因此在初始化函数中,我可以使用关键部分来保护一个变量,该变量告诉DLL是否已经初始化或这次是否需要初始化。通过这种方式避免了DllMain的初始化,这将导致死锁,因为我需要从初始化启动线程,并且线程使用DllMain的原因调用DLL_THREAD_ATTACH,并且获得与我们在DllMain

c - 不使用 TerminateThread() 优雅地终止线程

我的应用程序创建了一个线程并一直在后台运行。我只能手动终止线程,不能从线程回调函数中终止。目前我正在使用TerminateThread()来终止该线程,但它有时会导致它挂起。我知道有一种方法可以使用事件和WaitForSingleObject()使线程正常终止,但我找不到相关示例。拜托,这里需要代码。 最佳答案 TerminateThread是个坏主意,尤其是当您的线程使用同步对象(如互斥体)时。它会导致未释放的内存和句柄以及死锁,因此您需要做一些其他事情是正确的。通常,线程终止的方式是从定义线程的函数返回。主线程使用一个事件对象或