我有工作需要在DLL加載完成後立即完成。工作涉及同步,所以不能在dllmain內完成。是否有辦法觸發代碼執行一旦dllmain(或所有dllmains)完成?如何知道dllmain何時完成?
2
A
回答
3
在進程啓動和DLL 初始化程序, 可以被創建,但直到DLL初始化 做了的過程中,他們沒有開始執行 新主題。
如果這是成立的,那麼你應該可以在有問題的線程中完成你的工作,直到DLLMain完成後才能開始工作。當然,這會導致一些可能的同步問題打開,如果你使用互斥鎖,也許你可以解決這個問題。
注意:我沒有嘗試過這一點,它只是在理論上看起來可能會起作用。
P.S.如果你嘗試過,請留下評論它是否有效。
0
最簡單的方法是將所有代碼放到另一個函數中,這個函數在加載庫之後調用。
你也可以創建一個線程來完成這項工作,但我不確定你想要做什麼。
2
從我的角度來看,這一直是一個棘手的問題。如果第三方應用程序正在使用您無法控制的DLL,那麼很難強制其他應用程序調用某個初始化函數。最終,它可能是一個需求,但不必這樣做就可以使用DLL(例如,初始化winsock)。
如果初始化調用不可行,那麼很可能您需要依賴按需發生的延遲初始化。我在DLL Best Practices上跑過一篇相當不錯的論文,可能值得一讀。它有一個很好的列表,你可以在DLLMain中做不了的特定事情。我從經驗中知道這些需要遵守(「不要」列表)。
相關問題
- 1. 如何知道FileSystemWatcher何時完成
- 2. 如何知道Core Animation何時完成?
- 3. 如何知道何時下載完成
- 4. 如何知道ScheduledExecutorService何時完成
- 5. 如何知道何時下載完成?
- 6. 如何知道FileSystem.CopyDirectory何時完成?
- 7. 我如何知道location.reload()何時完成?
- 8. 如何知道dd何時完成
- 9. writeToFile如何知道它何時完成
- 10. 如何知道何時安裝完成?
- 11. 如何知道綁定何時完成?
- 12. 如何知道IntentService何時完成?
- 13. 如何知道appcache何時完成?
- 14. 如何知道完成服務何時完成交付結果?
- 15. 想要知道UIPickerViewDataSource何時完成
- 16. 知道線程何時完成
- 17. 知道模態動畫何時完成
- 18. 如何知道dismissModalViewControllerAnimated何時啓動以及何時完成?
- 19. 如何知道Lucene索引生成過程何時完成
- 20. WPF,如何知道任務已完成
- 21. 如何知道MKMapview setRegion:animated:已完成?
- 22. 我如何知道reloadData已經完成
- 23. 摩卡如何知道完成指定?
- 24. 如何知道iframe已完成加載?
- 25. 如何知道線程已完成
- 26. 如何知道nodejs進程完成?
- 27. 如何知道活動已完成?
- 28. 如何知道ASIFormDataRequest是否完成?
- 29. 我如何知道分欄已完成?
- 30. 如何知道下載是否完成
正如注意:Mark Wilkins的答案中提到的'最佳實踐'文檔建議不要調用'CreateThread()'(儘管它確實承認可以完成)。如果你決定沿着這條路線走,請仔細踩踏。 – 2010-05-06 00:55:53
我同意做到這一點的最好方法是創建一個初始化例程,並讓DLL的用戶調用它作爲API的一部分。這是常見的,即WinSock和IBM MQSeries – 2010-05-06 01:04:18
旋轉一個線程似乎工作。根據Raymond Chen的說法,你必須小心你在那裏做什麼,因爲如果你在dllmain中等待該線程時可能發生死鎖。見http://blogs.msdn.com/oldnewthing/archive/2007/09/04/4731478.aspx – 2010-05-06 19:48:51