我寫了一個類,可以做一些工作,在另一個線程:一個類可以有多個線程函數嗎?
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