Parameterübergabe an Thread in einer klasse
-
Hallo,
folgende Situation: Ich würde meinen Threads gerne Zugriff auf den vector Tabelle erlauben. Wahrscheinlich seh ich den Wald vor lauter Bäumen nicht mehr aber wie kann ich den mit übergeben?
class Searcher_Class { private: struct Datensatz { string item_no; string name; }; struct THREADDATA { unsigned int Range_from; unsigned int Range_to; string Suchbegriff; }; unsigned int Anzahl_gefundener_Datensätze; vector<Datensatz> Tabelle; static DWORD WINAPI Searcher_Thread(LPVOID lpParam) { THREADDATA *Range = reinterpret_cast<THREADDATA*>(lpParam); for(Range->Range_from; Range->Range_from <= (Range->Range_to); Range->Range_from++) { if((Tabelle[Range->Range_from].item_no.find(Range->Suchbegriff) != string::npos) || (Tabelle[Range->Range_from].name.find(Range->Suchbegriff) != string::npos)) { Anzahl_gefundener_Datensätze += 1; } } return 0; } void Search(string Begriff) { unsigned int Tabellengröße = Tabelle.size(); unsigned int Rest = Tabellengröße % Core->dwNumberOfProcessors; unsigned int Range = (Tabellengröße - Rest) / Core->dwNumberOfProcessors; unsigned int Index = 0; caseInsensitiveString(Begriff, string("")); THREADDATA *Threaddaten = new THREADDATA[Core->dwNumberOfProcessors]; for(unsigned int i = 0; i <= (Core->dwNumberOfProcessors - 1); i++) { Threaddaten[i].Suchbegriff = Begriff; Threaddaten[i].Range_from = Index; if((i != (Core->dwNumberOfProcessors - 1)) || Rest == 0) { Index += Range - 1; Threaddaten[i].Range_to = Index; Index += 1; } else { Index += Rest; Threaddaten[i].Range_to = Index; } } HANDLE *ThreadHandle = new HANDLE[Core->dwNumberOfProcessors]; for(unsigned int i = 0; i <= (Core->dwNumberOfProcessors - 1); i++) { ThreadHandle[i] = CreateThread(0, NULL, (LPTHREAD_START_ROUTINE)Searcher_Thread, (LPVOID)&Threaddaten[i], NULL, NULL); } WaitForMultipleObjects(Core->dwNumberOfProcessors, ThreadHandle, TRUE, INFINITE); } }
-
Nimm einen Zeiger auf die Tabelle in die Struktur THREADDATA auf.