我写了一个类,可以做一些工作,在另一个线程:一个类可以有多个线程函数吗?
class SkeData
{
public:
SkeData(INuiSensor* pSensor);
~SkeData();
HANDLE StartSaveSkeData_Frames(int nFrames = 1);
HANDLE StartSaveSkeData2File_Frames(HANDLE hFile,int nFrames = 1);
[...]
private:
//Two thread functions
static DWORD WINAPI AddFrames(LPVOID lpParam);
static DWORD WINAPI AddFrames2File(LPVOID lpParam);
[...]
};
HANDLE SkeData::StartSaveSkeData_Frames(int nFrames)
{
[...]
m_hThread = CreateThread(NULL, 0, AddFrames, this, 0, NULL);
return m_hThread;
}
HANDLE SkeData::StartSaveSkeData2File_Frames(HANDLE hFile,int nFrames)
{
[...]
m_hThread = CreateThread(NULL, 0, AddFrames2File, this, 0, NULL);
return m_hThread;
}
DWORD WINAPI SkeData::AddFrames(LPVOID lpParam)
{
SkeData *This = (SkeData *)lpParam;
return This->Thread_AddFrames();
}
DWORD WINAPI SkeData::AddFrames2File(LPVOID lpParam)
{
SkeData *This = (SkeData *)lpParam;
return This->Thread_AddFrames2File();
}
When I built the program solution in VS2010, linking error came up like this:
SkeData.obj : error LNK2019: unresolved external symbol "private: unsigned long __thiscall SkeData::Thread_AddFrames2File(void)" ([email protected]@@AAEKXZ) referenced in function "private: static unsigned long __stdcall SkeData::AddFrames2File(void *)" ([email protected]@@[email protected])
1>E:\***\DataCollection.exe : fatal error LNK1120: 1 unresolved externals
1>
1>Build FAILED.
然而,当我删除的线程功能之一,它可以成功地建造。因此我猜想错误的原因是关于线程函数的。但我仍然不明白为什么我无法在我的课程中添加更多的线程函数?
我希望任何人都能给出更多的解释。
谢谢!
更多:抱歉,当我粘贴我的代码时出现了错误...我确实实现了两个线程函数......如果我没有,错误不会是这样的,对吧?
因为你永远不会*添加*多一个线程函数;你*声称*你通过添加原型成员到类*声明*,但你从未*实现*它(至少你已经在这里显示)。 – WhozCraig 2013-03-17 13:59:58
你读过错误信息了吗?是什么让你认为链接器错误与多线程有关? – stakx 2013-03-17 14:45:34
@stakx:当然我阅读错误信息..我认为这是关于多线程的原因是因为当我删除了一个线程函数时,它可以被成功构建。 – eaglesky 2013-03-18 13:41:46