繁体   English   中英

在类中访问threadproc中的成员函数

[英]Accessing member functions in threadproc within a class

我在使用mfc函数时遇到一个难题

AfxBeginThread(AFX_THREADPROC pfnThreadProc,
   LPVOID pParam,
   int nPriority = THREAD_PRIORITY_NORMAL,
   UINT nStackSize = 0,
   DWORD dwCreateFlags = 0,
   LPSECURITY_ATTRIBUTES lpSecurityAttrs = NULL 
);

显然,类型AFX_THREADPROC是引用。 这是行得通的。 因此,在类(构造函数)中,我调用此函数以使用线程路由启动线程,并调用MyThreadProc(),如下所示。

pfnThreadProc =&MyThreadProc;

我从另一个程序复制了此用法,该程序在类之外定义了MyThreadProc()(称为USBCom)。 这很好。 线程开始了。 我调试它完成就好了。 大。 然后我意识到这个线程例程必须调用其他成员函数来完成它的工作线程任务。 我试过像

.. USBCom:MyMemberFunc()..

无济于事。 因此,我将此MyThreadProc()移到了类USBCom中。 编译我无法使用AfxBeginThread()的实例化。

我认为&MyThreadProc()是问题所在(它指向的是什么)。 大概有一些关于不允许成员函数的地址传递的标准,即整个封装。

那么我该如何解决这一困境。 我可以在类中启动线程的类中,其中线程proc在类之外,但可以访问或查看启动它的类中的成员函数。

在某些背景下,该线程的目的是读取我正在使用的USB端口的状态以及通过USB 2.0发送给我的数据。 我有一些要达到的性能里程碑,所以我希望这很精简。 我该怎么做??

疯狗

ps:我正在与FDDi FT240XS USB FIFO通信。

混淆源于使用“&”作为“地址”与“引用”之间的区别

C ++中的指针变量和引用变量之间有什么区别?

TL; DR:

int foo;
int *pointer = &foo;
int &reference = foo;

我希望这有帮助

我认为找到了答案,并不是说您的解决方案也不会很好。 我还遇到了许可问题,这些问题也必须解决。 现在完成了。

无论如何,我的答案是我必须公开这些方法。 我已经有一个指向该类实例化的对象的指针

UINT MyThreadProc(LPVOID param)
{
  MyClass *pMyHndl = (MyClass*)param;
  pMyHndl->myPublicFunct();
}

其中myPublicFunct()是类MyClass()的成员函数。

我想了以后,我有多傻。

感谢您的所有帮助。

疯狗

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM