我寫了一個包含函數和兩個線程函數的庫。在用戶程序中,我將使用Drive ID作爲參數調用庫中的函數。該函數根據我給出的驅動器ID號來創建線程。然後,此線程函數將處理驅動器從驅動器獲取文件夾列表並將其放入隊列中。一旦完成,它會調用一定數量的線程(我用MAX_Threads初始化),這些子線程將處理隊列並將驅動器中的文件列表放入其相應的向量中。現在我的問題是我必須將這些向量返回給調用庫的語句。我介紹了很多網站,但我沒有得到預期的結果。如何將矢量返回到Windows線程函數?
我實行的是該片段..
ListFiles(string DriveId)
{
loop(no of drives)
create Threads
}
DWORD WINAPI FileList::ParThread(LPVOID s)
{
//Process Drive
directories.push_back(path + "\\" + ffd.cFileName); //global queue
//it will be locked and then inserted and released by each thread
loop(Max - threads)
CreateThreads
}
DWORD WINAPI FileList::List(LPVOID s)
{
//create vector local to each thread
//create local queue that copies values from global queue and processing occurs in local queue
//inserts file name into vector
}
現在我想這些載體返回調用該函數ListFiles這是在庫中的聲明。
如何使用線程ID作爲鍵和矢量作爲數據的['std :: unordered_map'](http://en.cppreference.com/w/cpp/container/unordered_map)?然後,當所有線程完成時,只需將地圖中的所有向量收集到一個向量中即可。 –
@ JoachimPileborg ..感謝這個想法..而不是,我會去一個雙向量,或者在我的程序中,而不是一個全局向量。請提供任何片段或代碼,將向量返回到調用它的函數根據我的程序... – WarriorPrince
當矢量滿或填充時,你需要一個'回調'機制,這個回調過程會做你需要的。從'ListFiles'函數返回向量會破壞與多引導相關的邏輯 –