为什么线程程序应该是静态的或者成员函数? 任何有效的原因?为什么线程程序应该是静态的或者成员函数
回答
非静态成员变量有一个隐含的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. JAVA:什么时候该类应该是静态或动态的
- 8. 静态成员函数和线程安全
- 9. 为什么线程函数的参数应该在堆中?
- 10. 静态成员和多线程
- 11. “非法使用非静态成员函数”这是什么?
- 12. 为什么可以这样调用非静态成员函数?
- 13. 静态成员函数和全局函数有什么不同?
- 14. 为什么我只能从静态函数中访问静态成员?
- 15. 你应该成为网络程序员的素质和技能是什么?
- 16. 为什么我们不能在静态成员函数中使用const成员?
- 17. _beginthreadex静态成员函数
- 18. Const静态成员函数
- 19. 为什么CanvasRenderingContext2D.createLinearGradient()不是静态函数?
- 20. 数据库层成员应该是静态还是实例?
- 21. 多线程应用程序中的静态计数器线程是否安全?
- 22. 公共静态类中的非静态成员是否线程安全?
- 23. 什么是多线程应用程序?
- 24. 为什么std :: queue :: empty()不是线程安全的?不应该const函数是线程安全的?
- 25. PHP |为什么我应该使用公共静态/私有静态函数而不是公共/私有函数?
- 26. 静态非成员变量,它会是该程序中的所有线程相同的变量?
- 27. 如何从静态成员函数中调用非静态成员函数?
- 28. 为什么静态类只能有静态成员?
- 29. 为什么Java程序员应该关心2038年的错误?
- 30. 的boost ::线程无效使用了非静态成员函数的
没有更具体的上下文没有。顺便说一句,标记MFC和PThreads的任何特定原因?我认为它很少同时使用这两个库。 – 2010-09-08 14:30:39