【发布时间】:2016-06-23 14:48:15
【问题描述】:
我用CreateThread function用C++写了一个类似C# BackgroundWorker的类。我的代码:
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 的类:
ListenThread.cpp:
class ListenThread :public BackgroundWorker
{
DWORD WINAPI Function(LPVOID vpPram)
{
//DO somthing...
return 0;
}
};
但是那行给了我以下错误:
非标准语法;使用 '&' 创建指向成员的指针
【问题讨论】:
-
this->Function是什么意思?调用它?传递函数的地址? -
但你知道
std::thread,对吧? -
放弃 CreateThread(在 C++ 代码中不应该使用它,15 年前到处都提到过它),并切换到 std::thread。
-
@SergeyA:如果
std::thread确实提供了与CreateThread(或_beginthreadex)相同的功能,那么您说得有道理。事实是,它没有。例如,尝试使用std::thread创建一个处于挂起状态的线程。 -
@IInspectable,首先,CreateThread 应该永远在 C++ 代码中使用。这一点是确定的,我希望,没有争议。至于使用
std::thread与_beginthreadex,我没有看到OP 使用后者的任何额外功能。很明显,原生线程的一些特性是没有通过std::thread暴露出来的,但是除非用到,否则std::thread应该是首选。
标签: c# c++ multithreading backgroundworker createthread