Hallo Leute,
ich bin gerade dabei mich mit Threads zu beschäftigen, da ich ne Menge parallelisierbarer Berechnungen habe. Derzit ist es so, dass für jede Berechnung (Euklidischer Abstand) ein Thread erstellt wird, welcher durchläuft und sich dann wieder schliesst. Das ist allerdings langsamer als das direkte Ausfürhren des Codes ohne die Auslagerung in einen Thread. Ich vermute, weil eben immer ein neuer Thread erstellt werden muss.
Mein Frage ist daher, wie ich einen Thread "einschläfern" kann und wieder wecken wenn ich ihn brauche?!?!
Die grobe Art und weise wie ich das bisher geschrieben habe ist...
Schonmal danke für Hinweise. Ein einfacher Link zu gutem Beispielcode hilft mir auch schon!
MfG
ich bin gerade dabei mich mit Threads zu beschäftigen, da ich ne Menge parallelisierbarer Berechnungen habe. Derzit ist es so, dass für jede Berechnung (Euklidischer Abstand) ein Thread erstellt wird, welcher durchläuft und sich dann wieder schliesst. Das ist allerdings langsamer als das direkte Ausfürhren des Codes ohne die Auslagerung in einen Thread. Ich vermute, weil eben immer ein neuer Thread erstellt werden muss.
Mein Frage ist daher, wie ich einen Thread "einschläfern" kann und wieder wecken wenn ich ihn brauche?!?!
Die grobe Art und weise wie ich das bisher geschrieben habe ist...
Code:
struct ThreadContainer
{
LPDWORD ThreadID;
int from;
int to;
};
DWORD WINAPI ThreadFunc(LPVOID val)
{
ThreadContainer* tCnt = (ThreadContainer*)val;
for(int i=tCnt->from; i<tCnt->to; i++)
{
cout << "Thread: " << tCnt->ThreadID << " numBaer: " << i << endl;
}
return 1;
};
int main(int argc, char* argv[])
{
ThreadContainer tCnts;
HANDLE handles;
tCnts.from = 0;
tCnts.to = 10;
LPVOID ptr = (LPVOID)(&tCnts);
handles = CreateThread(NULL, 0, ThreadFunc, ptr, 0, tCnts.ThreadID);
WaitForSingleObject(handles, INFINITE);
return 0;
}
Schonmal danke für Hinweise. Ein einfacher Link zu gutem Beispielcode hilft mir auch schon!
MfG