2014-02-18 40 views
1

我寫了一個包含函數和兩個線程函數的庫。在用戶程序中,我將使用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這是在庫中的聲明。

+0

如何使用線程ID作爲鍵和矢量作爲數據的['std :: unordered_map'](http://en.cppreference.com/w/cpp/container/unordered_map)?然後,當所有線程完成時,只需將地圖中的所有向量收集到一個向量中即可。 –

+0

@ JoachimPileborg ..感謝這個想法..而不是,我會去一個雙向量,或者在我的程序中,而不是一個全局向量。請提供任何片段或代碼,將向量返回到調用它的函數根據我的程序... – WarriorPrince

+0

當矢量滿或填充時,你需要一個'回調'機制,這個回調過程會做你需要的。從'ListFiles'函數返回向量會破壞與多引導相關的邏輯 –

回答

0

庫函數可以創建向量並將其地址傳遞給LPVOID線程參數。如果您需要多個向量,則將它們全部放入一個結構中,並在LPVOID線程參數中傳遞該結構的地址。

+0

您正在講述如何將線程傳遞給線程。問如何將線程從處理線程的線程返回給調用語句。 – WarriorPrince

+0

如果你將一個指針傳遞給一個線程,那麼線程結束時你有更新的向量。這與返回一個向量具有相同的效果。 –

+0

@ScottMc ...現在我明白你的意思了。我說發送矢量作爲參數線程並將其作爲一個輸出參數right.Can你請表達你的想法,通過任何代碼....? – WarriorPrince