c++ - 奇怪的 C++ 线程函数调用

标签 c++ multithreading

我有以下内容:

   class DThread
   {
      virtual void run()=0;

    _beginthreadex(NULL,0,tfunc,this,0,&m_UIThreadID);  // class itself being passed as param to thread function...

    static unsigned int __stdcall tfunc(void* thisptr) 
        {
            static_cast<DThread*>(thisptr)->run();
            return 0;
        }

//other stuff

}

run 函数是在派生类中实现的。

为什么在线程中调用的函数是通过强制转换的 this 指针调用的?这是好的做法吗?

直接调用不行吗?

实际需要运行的函数在派生类中。

我的问题是

最佳答案

_beginthreadex 需要一个 (stdcall) C 风格函数,它不能使用 C++ 成员函数,因为它不了解 C++。使成员函数运行的方法是传递一个指向对象的指针并在该函数内部调用成员函数。这种功能通常被称为蹦床。

关于c++ - 奇怪的 C++ 线程函数调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2848928/

相关文章:

c++ - 在 Objective-C 类中使用 C++ 类作为协议(protocol)

c++ - 适用于 native Visual Studio 开发人员的有用加载项或插件

c++ - 多个模板匹配只检测一个匹配项

c++ - 静态成员函数和线程安全

Python time.time() 在并发程序中的可靠性

swift - 一次对数据库执行一项多项任务

c++ - 为 Visual Studio 调试 C++ 自定义类型的可视化工具

c++ - 我如何以编程方式确定网络适配器在 Windows 上是否是虚拟的?

c# - Interlocked.Exchange 有多安全?

java - 为什么使用多线程 ping IP 段时得到不同的结果?