gpt4 book ai didi

c# - C++中的函数指针

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:33:39 26 4
gpt4 key购买 nike

我用了CreateThread function写一个类似 C# BackgroundWorker 的类在 C++ 中。我的代码:

BackgroundWorker.h:

class BackgroundWorker
{
private :
HANDLE _threadHandle;
unsigned int _threadCallcounter;
DWORD _threadID;
public:
BackgroundWorker();
~BackgroundWorker();
virtual DWORD WINAPI Function(LPVOID vpPram);
}

BackgroundWorker.cpp:

#include "BackgroundWorker.h"
void BackgroundWorker::DoWork()
{
this->_threadHandle = CreateThread(NULL,
0,this->Function,&this->_threadCallcounter,
0, &this->_threadID); // !!!***This part throws an error***!!!
}

然后我创建了另一个派生自 BackgroundWorker 的类:

监听线程.cpp:

class ListenThread :public BackgroundWorker
{
DWORD WINAPI Function(LPVOID vpPram)
{
//DO somthing...
return 0;
}
};

但是那一行给我以下错误:

non - standard syntax; use '&' to create a pointer to member

最佳答案

CreateThread 期望的函数指针必须具有此签名:

DWORD WINAPI ThreadProc(LPVOID lpParameter);

当你创建一个成员函数时,它会得到一个不可见的“this”参数作为第一个参数,所以你可以隐式地声明这样的东西:

DWORD WINAPI ThreadProc(BackgroundWorker *this, LPVOID lpParameter);

创建一个静态成员函数以省略 this 指针,如果您需要在线程例程中使用该指针,则将其作为 void * 参数传递

关于c# - C++中的函数指针,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35888017/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com