2014-10-27 97 views
0

我已经注意到这个创建线程时,我们何时必须使用LPTHREAD_START_ROUTINE?

HandleWorker = CreateThread(NULL, 0, (LPTHREAD_START_ROUTINE)this->WorkerThread, this, 0, &Id); 

我也意识到了这个问题here,这解释了LPTHREAD_START_ROUTINE类型定义 起始地址为线程

但是,当我们要使用任何人都可以向我解释的它?我的意思是为什么不能,我们只是使用

HandleWorker = CreateThread(NULL, 0, this->WorkerThread, this, 0, &Id); 
+0

你确定这个例子有效吗?这个参数是某个签名函数的地址。它应该看起来像'&YourClass :: WorkerThread'。 – NikolayKondratyev 2014-10-27 18:24:59

+0

@NikolayKondratyev,第一个绝对有效! – Samer 2014-10-27 18:37:18

+0

当你坚持使用标准C++即'std :: thread'时,你不会这么做。在弄清楚你通过什么的时候更聪明一些。 – MSalters 2014-10-28 09:46:06

回答

2

LPTHREAD_START_ROUTINE是定义为一个函数指针,需要一个空指针,并返回一个DWORD类型。

如果this->WorkerThread属于这种类型,则不必投射它。

相关问题