【问题标题】:How to pass runtime class to AfxBeginThread如何将运行时类传递给 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 类?

【问题讨论】:

    标签: c++ multithreading class object


    【解决方案1】:
    1. AfxBeginThread 有两个重载,一个带函数或静态方法,另一个带运行时类,它们是互斥的。并且没有一个采用非静态方法(而没有this 的这种函数几乎不存在)
    2. RUTNIME_CLASS 宏将类名作为参数,所以你问的问题不是问题。
    3. 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
    猜你喜欢
    • 1970-01-01
    • 2021-12-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-04-05
    • 1970-01-01
    • 2010-12-03
    • 2019-12-11
    相关资源
    最近更新 更多