如何将运行时类传递给 AfxBeginThread
Posted
技术标签:
【中文标题】如何将运行时类传递给 AfxBeginThread【英文标题】:How to pass runtime class to AfxBeginThread 【发布时间】:2020-08-31 18:05:08 【问题描述】:Class A
method1()
m_GetDataThread = AfxBeginThread(B::method2, RUNTIME_CLASS, THREAD_PRIORITY_BELOW_NORMAL, 1 << 20, STACK_SIZE_PARAM_IS_A_RESERVATION);
Class B
method2()
----------
如果 RUNTIME_CLASS 是 A 类,我可以通过它来代替 RUNTIME_CLASS 但在上述情况下如何通过 B 类?
【问题讨论】:
【参考方案1】:AfxBeginThread
有两个重载,一个带函数或静态方法,另一个带运行时类,它们是互斥的。并且没有一个采用非静态方法(而没有this
的这种函数几乎不存在)
RUTNIME_CLASS
宏将类名作为参数,所以你问的问题不是问题。
2020 年是否必须使用 MFC 可以理解,但无论如何不明白为什么 2020 年新代码必须使用 MFC 线程设施。考虑std::thread
、std::async
,或者至少直接_beginthreeadex
/CreateThread
【讨论】:
当我将类名作为参数传递时,它会给出错误no instance of overloaded function matches the argument list
MFC 自定义 RTTI 有一些影响。与RUNTIME_CLASS
一起使用的类必须从CObject
单继承,并且至少具有DECLARE_DYNAMIC
,(或上级DECLARE_DYNCREATE
/DECLARE_SERIAL
)。
和AfxBeginThread
一起使用,类必须继承自CWinThread
以上是关于如何将运行时类传递给 AfxBeginThread的主要内容,如果未能解决你的问题,请参考以下文章