使用 CreateThread 调用类函数时出现错误 C3867
Posted
技术标签:
【中文标题】使用 CreateThread 调用类函数时出现错误 C3867【英文标题】:error C3867 when calling class function with CreateThread 【发布时间】:2015-10-04 09:35:07 【问题描述】:我尝试将一个类函数传递给从主函数调用的 CreateThread,但出现错误:
错误 C3867:'Display::fill_matrix':函数调用缺少参数列表;使用 '&Display::fill_matrix' 创建指向成员的指针
class Display
public:
Display();
DWORD WINAPI fill_matrix();
;
Display display;
main()
CreateThread(NULL, 0, display.fill_matrix, NULL, 0, 0);
【问题讨论】:
【参考方案1】:fill_matrix()
是一个非静态成员函数。因此它的第一个参数是一个指向Display
类实例的指针。这就是编译器所抱怨的。解决这个问题的常规方法是创建一个静态成员函数并将其传递给CreateThread
。这是它想要的:
class Display
public:
Display();
static DWORD WINAPI fill_matrix_static(void* obj_ptr)
Display* display_ptr = (Display*) obj_ptr;
return display_ptr->fill_matrix();
DWORD WINAPI fill_matrix();
;
然后这样称呼它:
CreateThread(NULL, 0, fill_matrix_static, (void*) &display, 0, 0);
【讨论】:
以上是关于使用 CreateThread 调用类函数时出现错误 C3867的主要内容,如果未能解决你的问题,请参考以下文章
在类构造函数中将此指针传递给 CreateThread 在线程过程中表现得很奇怪
015 _beginthreadex CreateThread 函数区别