爲什麼線程程序應該是靜態的或者成員函數? 任何有效的原因?爲什麼線程程序應該是靜態的或者成員函數
回答
非靜態成員變量有一個隱含的this
參數由編譯器內部傳遞。
你有
ClassInQuestion {
void threadFunc(int);
}
和編譯器在內部創建了一個函數
void ClassInQuestion_threadFunc(ClassInQuestion* thisObject, int);
所以除非線程程序接受一個指針TA功能有ClassInQuestion*
類型的第一個參數將不匹配預期的功能簽名。
問題顯示爲「靜態*或*成員函數」。 – 2010-09-08 14:34:31
我也看錯的問題,但對於MFC,即需要以下顯示遊離的或靜態成員函數:http://www.go4expert.com/forums/showthread.php?t=3197和用於並行線程(C-API ),這似乎很明顯,所以我猜這個問題有點草率。 – stefaanv 2010-09-08 15:21:10
主要是因爲非靜態成員函數有一個隱式參數,很難填入函數指針。我想,當指定一個非靜態成員函數時,你也會期望該對象是已知的,這與函數的其他功能是不同的。
通常,線程過程必須由具有回調機制的線程庫中的預定義函數調用。爲了能夠調用成員函數(不是靜態的),你需要一個類的對象來調用該函數。然而,沒有一個可用的線程庫支持這個,即它們不接受將被用來調用註冊函數的對象。所以所有這些功能都應該是靜態的並且適當地進行類型化。
- 1. 什麼是非靜態成員函數?
- 2. 靜態函數和多線程中的C++靜態成員
- 3. 靜態線程函數訪問非靜態類成員在C++
- 4. 爲什麼我的靜態成員函數不能在程序集中識別?
- 5. 線程應該是靜態的嗎?
- 6. 帶有靜態成員函數的C++/CLI線程
- 7. Qt庫 - 靜態成員函數的線程安全
- 8. 創建一個非靜態成員函數的線程?
- 9. JAVA:什麼時候該類應該是靜態或動態的
- 10. 靜態成員函數和線程安全
- 11. 爲什麼線程函數的參數應該在堆中?
- 12. 靜態成員和多線程
- 13. C#線程安全靜態成員
- 14. 靜態成員數組成員函數
- 15. 「非法使用非靜態成員函數」這是什麼?
- 16. 爲什麼可以這樣調用非靜態成員函數?
- 17. 靜態成員函數和全局函數有什麼不同?
- 18. 你應該成爲網絡程序員的素質和技能是什麼?
- 19. 爲什麼我只能從靜態函數中訪問靜態成員?
- 20. 函子到靜態成員函數和靜態成員函數的類型
- 21. 爲什麼我們不能在靜態成員函數中使用const成員?
- 22. _beginthreadex靜態成員函數
- 23. Const靜態成員函數
- 24. 非靜態成員函數
- 25. C++操作者必須是非靜態成員函數
- 26. 爲什麼CanvasRenderingContext2D.createLinearGradient()不是靜態函數?
- 27. 數據庫層成員應該是靜態還是實例?
- 28. 多線程應用程序中的靜態計數器線程是否安全?
- 29. 爲什麼is_lock_free是成員函數?
- 30. 爲什麼thread_local不能應用於非靜態數據成員以及如何實現線程本地非靜態數據成員?
沒有更具體的上下文沒有。順便說一句,標記MFC和PThreads的任何特定原因?我認爲它很少同時使用這兩個庫。 – 2010-09-08 14:30:39