I create a thread as a part of some pool, that needs to be destroyed when the application (DLL actually) finishes. So I have a some "globals", meaning a structure instantiated globally statically and in the destructor it releases any created threads and waits for them using WaitForSingleObject. Unfortunately this freezes forever and checking in the debugger reveals that the threads are still there, just stuck somewhere in the system DLLs. When I call this before the globals are getting released, then all goes fine. I don't see any mentioning of this in the Win32 docs. Any ideas?
WaitForSingleObject for a thread freezes when called from application globals
527 views Asked by mrzacek mrzacek At
1
There are 1 answers
Related Questions in MULTITHREADING
- How can I outsource worker processes within a for loop?
- OpenMP & oneTbb difference
- Receiving Notifications for Individual Task Completion OmniThreadLibrary Parallel.ForEach
- C++ error: no matching member function for call to 'enqueue' futures.emplace_back(TP.enqueue(sum_plus_one, x, &M));
- How can I create a thread in Haskell that will restart if it gets killed due to any reason?
- Qt: running callback in the main thread from the worker thread
- Using `static` on a AVX2 counter function increases performance ~10x in MT environment without any change in Compiler optimizations
- Heap sort with multithreading
- windows multithreading CreateMutex
- The problem of "fine-grained locks and two-phase locking algorithm"
- OpenMP multi-threading not working if OpenMPI set to use one or two MPI processor
- WPF Windows Initializing is locking the separated thread in .Net 8
- TCP Client Losing Connection When Writing Data
- vc++ thread constructor throwing compiler error c2672
- ASP.NET Core 6 Web API : best way to pause before resending email
Related Questions in WINAPI
- How to immediately apply DISPLAYCONFIG_SCALING display scaling mode with SetDisplayConfig and DISPLAYCONFIG_PATH_TARGET_INFO
- Changing the theme of a #32768 (menu) window class at runtime
- Issue with GetOpenFileName while debugging
- How to populate a ListBox with SendMessage?
- Is there a function to end a child process?
- HDR video publishing
- Frameless Qt + WinAPI maximized window size is bigger than the availableGeometry()
- Mount .iso file with python
- What is Win32 x86-64 CONTEXT::VectorRegister for?
- WinAPI - right mouse drag & drop and IContextMenu
- Win32 per-filesystem cache tuning?
- Client connection timeout during Android & Windows PC communication via sockets
- MessageBoxEx sometimes shows as hollow window, border only, and only on Windows 11
- Win32api send message and Pydirectinput and Powertoy (Keyboard Manager ) Not working when open the application
- Would it be possible to run an application right after csrss.exe loads? (Windows)
Related Questions in WAITFORSINGLEOBJECT
- How to make sure the process signalled to terminate using TerminateProcess WinAPI is actually terminated?
- Windows API CreateProcess and WaitForSingleObject
- How to wait for thread to finish execution?
- Possible inefficiency in WaitForSingleObject, from benchmarking against Sleep()
- CreateProcessWithLogonW can't read 0xCCCCCCCC Error
- Program hangs/Issue with WaitForSingleObject/CreateProcess in Delphi
- How to let a thread wait itself out without using Sleep()?
- access violation on line WaitForSingleObject()
- Process WaitForSingleObject - responsive UI
- Process (.exe) called with "CreateProcess" crushes
- WaitForSingleObject for a thread freezes when called from application globals
- How to use CreateProcess and WaitForSingleObject without INFINITE flag?
- Wrapping pthread events (or Windows signals) in Python using ctypes or similar
- windows WaitForMultipleObjects / MsgWaitForMultipleObjects difference
- Waiting for a TThread to finish with WaitForSingleObject()
Popular Questions
- How do I undo the most recent local commits in Git?
- How can I remove a specific item from an array in JavaScript?
- How do I delete a Git branch locally and remotely?
- Find all files containing a specific text (string) on Linux?
- How do I revert a Git repository to a previous commit?
- How do I create an HTML button that acts like a link?
- How do I check out a remote Git branch?
- How do I force "git pull" to overwrite local files?
- How do I list all files of a directory?
- How to check whether a string contains a substring in JavaScript?
- How do I redirect to another webpage?
- How can I iterate over rows in a Pandas DataFrame?
- How do I convert a String to an int in Java?
- Does Python have a string 'contains' substring method?
- How do I check if a string contains a specific word?
Popular Tags
Trending Questions
- UIImageView Frame Doesn't Reflect Constraints
- Is it possible to use adb commands to click on a view by finding its ID?
- How to create a new web character symbol recognizable by html/javascript?
- Why isn't my CSS3 animation smooth in Google Chrome (but very smooth on other browsers)?
- Heap Gives Page Fault
- Connect ffmpeg to Visual Studio 2008
- Both Object- and ValueAnimator jumps when Duration is set above API LvL 24
- How to avoid default initialization of objects in std::vector?
- second argument of the command line arguments in a format other than char** argv or char* argv[]
- How to improve efficiency of algorithm which generates next lexicographic permutation?
- Navigating to the another actvity app getting crash in android
- How to read the particular message format in android and store in sqlite database?
- Resetting inventory status after order is cancelled
- Efficiently compute powers of X in SSE/AVX
- Insert into an external database using ajax and php : POST 500 (Internal Server Error)
So the solution is indeed to avoid waiting and actually releasing anything in the DllMain (including the globals) is bad, so one needs to release everything important before. That's sometimes a bit tricky, when it comes to DLLs, but well...