如何将运行时类传递给 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::threadstd::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的主要内容,如果未能解决你的问题,请参考以下文章

如何将参数传递给afxbeginthread

初始化期间的运行时类方法替换

无法将运行时类绑定到XAML T必须是WinRT类型

如何在运行时将类名传递给 JSON DeserializeObject?

如何将值从子脚本传递给同时运行的父脚本?

反射--03--运行时类对象