Threads gleichzeitig in einem Programm

neus

Grünschnabel
Hallo,

ich hoffe ihr versteht meine Frage nicht als dumme Frage, weil ich schon glaube das ich mich hier ein vielleicht wenig falsch formuliere.
Ich programmiere eigentlich in PHP und bin jetzt blutiger Anfänger in C++, weil mir die PHP-Performance nicht mehr reicht.

Ich möchte ein Programm schreiben, das mehrere Sachen Programm intern gleichzeitig macht (ich brauch einfach mal ein einfaches Beispiel zum rumprobieren, was nicht unendlich aufgebläht ist).

Als Beispiel soll z.B. ein Programm gestartet werden, das dann gleichzeitig auf 10 verschiedene Dateien auf verschiedenen FTP-Servern zugreift, parst und dann irgendwelche informationen in eine DB schreibt. Ob Sinn oder Unsinn ist erst mal egal. Mir geht es darum das das Programm verschiedene Tätigkeiten macht die unterschiedlich lang dauern können, aber es ohne weiteres mehrere Prozesse Programmintern parallel laufen können.

Das ganze mit mehreren Starts der .EXE zu machen halte ich für Ressourcenfressend (so hab ichs bisher in PHP gemacht und es ist ätzend langsam, weil jedes mal alles neu geparst wird).

Hab ich also die möglichkeit dazu, das wie in meinen Beispiel zu machen ?
Ich wär superdankbar, wenn mir irgendjemand ein Beispiel zeigen könnte wie es in meinem Beispielbild ist.

Auch wenns frech klingt, vielleicht genau so wie mein Bild aussieht, das ich da etwas besser durchsteig :( :confused:
 

Anhänge

http://msdn.microsoft.com/en-us/library/ms682453.aspx

Du musst einfach nur bei Programmstart so viele Threads starten wie du brauchst, und in jedem eine deiner Funktionen ausführen.
Allerdings musst du dabei immer beachten, dass gleichzeitig halt wirklich gleichzeitig heisst, sprich wenn 2 Funktionen gleichzeitig auf die gleiche Datenbank zugreifen, dann musst du sicher stellen, dass die sich nicht gegenseitig überschreiben.
 
Dankeschön,

ich habs hinbekommen und die Threads laufen.
Das mit der Datenbank ist wirklich ein Problem.

Bin am überlegen ob ich nicht doch das Hauptprogramm Select-Abfragen machen lass, die an den Thread übergeb, der dann nur noch Inserts anhand der ID macht.

Wenn 10Threads oder mehr einen Select durchführen, befürchte ich schon das es zu doppelten Abfragen kommen kann. Selbst wenn ich eine Spalte mitführe die anzeigt, durch Thread genutzt oder nicht. Könnte ja trotzdem sein, das durch Abfragezeiten was nicht stimmt.

Evt. könnte man dies in einer Schleife laufen lassen, die prüft ob Thread aktiv oder nicht.
Aber wie kann ich am besten rausbekommen ob ein gestarteter Thread noch läuft ?
 
Ein Programm threadsafe ist eine Aufgabe an der selbst Experten oft verzeifeln, google mal, nach threadsafe, da findest du jede Menge Tipps.

Aus meiner Sicht ist die beste Methode ein Programm halbwegs threadsafe zu organisieren ein Mutex.

Code:
HANDLE hMutex = CreateMutex(NULL, FALSE, "MeinDBMutex");
WaitForSingleObject(hMutex, INFINITE);

// hier kannst du auf die Datenbank zugreifen

ReleaseMutex(hMutex);
CloseHandle(hMutex);

Hast du in allen threads jeden Datenbankzugriff im gleichen Mutex verschachtelt, kann immer nur einer zugreifen.
 
Zurück