C parallele Ausführung
-
Hallo,
also ich möchte 2 C-Dateien gleichzeitig ausführen. ich habe mir eine Art Main gebastelt die nur die hauptfunktionen der beiden CDateien aufruft.
Meine Frage : Gibt es da irgend eine einfache schnelle Lösung?
Ich kenne mich etwas mit Sema, Queue etc aus.. so komplex soll es aber eigentlich nicht werden. Nur start drücken und die beiden funktionen starten.Habt ihr dazu irgendwelche Ideen?
-
Dein Stichwort heißt:
ThreadsEdit:
Zumindest nehme ich das an, genau weiß ich auch nicht, weil Du Dich mindestens unglücklich ausdrückst --> eine C-Datei kann man nicht ausführen.
-
hi erstmal danke für die schnelle antwort.
also ich habe 2 c -files (*.c) die beinhalten funktionen die eine hauptfunktion heißt zb fahren() die aus dem anderen c file heißt zb scannen.
diese beiden funktionen sollen nun aus einem weiter c file aufgrufen werden:
Ziel als Pseudocode
int main()
{
fahren();
scannen();
}Wie funktioniert das mit den threads ich kenne das ganze thema nur von freeRTOS mit AVR
unter C habe ich keine ahnung.
ist das auch mit PRIO? das brauche ich ja gar nicht .. diese beiden funktionen sollen einfach nur parallel starten
wobei während gefahren wird.. gesacannt werden soll
wie funktioniert das mit den threads denn genau?
-
Das Stichwort "Threads" hat Belli nicht genannt, damit du uns danach fragst, was Threads sind, sondern damit du bei Google Suchanfragen wie "threads", "C threads", "C threads tutorial" und ähnliche durchführst und wenigstens versuchst, dir das nötige Wissen selber anzueignen. Das kannst du angesichts des umfangreichen Themas (deshalb hat Belli auch gar nicht erst versucht eine Erklärung im Rahmen eines Forenbeitrags zu geben) unmöglich in 9 Minuten gemacht haben.
P.S.: Und bitte benutze Grammatik! Deine Beiträge sind praktisch unlesbar.
-
Danke für die Hilfe.
-
SeppJ schrieb:
Das Stichwort "Threads" hat Belli nicht genannt, damit du uns danach fragst, was Threads sind
-
SeppJ schrieb:
Das Stichwort "Threads" hat Belli nicht genannt, damit du uns danach fragst, was Threads sind, sondern damit du bei Google Suchanfragen wie "threads", "C threads", "C threads tutorial" und ähnliche durchführst und wenigstens versuchst, dir das nötige Wissen selber anzueignen. Das kannst du angesichts des umfangreichen Themas (deshalb hat Belli auch gar nicht erst versucht eine Erklärung im Rahmen eines Forenbeitrags zu geben) unmöglich in 9 Minuten gemacht haben.
Also bevor ich in ein Forum schreibe, versuche ich doch vorher etwas rauszufinden oder?
Ich dachte für so etwas ist ein Forum da!
Ich programiere in C und nicht in C++ oder sonstwas.
Ich weiß was Task/Threads/Queues/Semaphoren/ Mutex sind ich habe nur gedacht in einem Forum könnte man eine einfache schnelle Lösung finden. Da sich in mein Problem ja nur um zwei Funktionen handeltAber egal!
-
Wenn Du das alles weißt, wo ist dann das Problem, wenn ich Dir doch sage, dass Dein Stichwort 'Threads' ist?
Du musst Dich dafür Funktionen Deines Betriebssystems bedienen, sprich, es wird zum Beispiel unter Linux anders aussehen (müssen), als unter Windows.
Unter Windows wären die entsprechenden Funktionen:
CreateThread oder (besser) _beginthread bzw. _beginthreadex.
-
Es gibt keine einfache Loesung in C. Threads sind Aufgabe des Betriebssystems und die betriebssystemspezifische API muss genutzt werden. Mit C11 hat sich das etwas geaendert, ist aber unter Windows nicht verfuegbar.
-
Age schrieb:
Also bevor ich in ein Forum schreibe, versuche ich doch vorher etwas rauszufinden oder?
Ja, du solltest versuchen das Problem vorher selbstständig zu lösen und immer mitzudenken, wenn dir Antworten gegeben werden.
Ich weiß was Task/Threads/Queues/Semaphoren/ Mutex sind ich habe nur gedacht in einem Forum könnte man eine einfache schnelle Lösung finden. Da sich in mein Problem ja nur um zwei Funktionen handelt
Das ist aber eben nicht so einfach, das wüsstest du doch auch, wenn du weißt, was Threads sind und wie man sie ungefähr benutzt. Wenn du hier konkret einen Versuch gezeigt hättest, der nicht funktioniert, dann könnte man dir auch konkret helfen. Derzeit gibt es einfach viel zu viele unbeantwortete Gegenfragen, um dir helfen zu können.
Oder um dir eine konkrete Antwort zu geben:
Es gibt keine Funktion wiemagische_parallele_ausführung_immer_genau_so_wie_ich_es_haben_möchte(fahren, scannen);
-
Mir hart das Tutorial am anfang ziemlich geholfen, ich weiß nur grad nicht wie mans verlinkt.
Such einfach mal "openmp tutorial" bei google und dann ists gleich der erste link, ziemlich gut beschrieben find ich!
-
nippler92 schrieb:
ich weiß nur grad nicht wie mans verlinkt.
-
nööö, das mein ich
nachdenken hilfe, ich weiß
www.bero-software.de/tutorials_programming/omp.pdf
-
Was habt ihr denn für unbeantwortete Gegenfragen?
Also ich kenne das ganze Multitasking nur in Verbindung mit FreeRTOS.
Ich dachte evtl gibt es eine elegante Lösung für einfache 2 Funktionen ohne viel Aufwand.Ich benutze Win 7/ VS2005
Eigentlich habe ich in Matlab programiert, das dann die exe aufruft aber so funktioniert das leider nicht parallel sondern nacheinander. Es gibt zwar eine Toolbox dafür, diese ist aber zu teuer.Deswegen wollte ich es in C weiter probieren da ein Teil der Software eh schon in c ist.
ich bin kein Held in diesem Multithreading aus diesem grund wollte ich es so einfach wie möglich.http://skript.eit.h-da.de/rzs/Docu/FreeRTOS_Documentation/modules.html
Benötige ich Prioritäten und Queues? Eigentlich nicht oder?
-
Age schrieb:
Was habt ihr denn für unbeantwortete Gegenfragen?
[...]
Benötige ich Prioritäten und Queues? Eigentlich nicht oder?
Wahrscheinlich nicht. Aber das musst Du doch selbst wissen!
Sollen Deine beiden Funktionen nur jeweils einmal ausgeführt werden oder in einer Schleife immer und immer wieder?
Falls letzteres, soll das Programm überhaupt eine Möglichkeit haben, geordnet zum Ende zu kommen?
Ansonsten, wie oben schon gesagt, für Windows:
_beginthread, bzw. _beginthreadex
-
OpenMP ist aber sicher gerade nicht das, was der Threadersteller sucht. Er sucht wahrscheinlich eine feingesteuerte Parallelisierung auf Thread- oder Prozessebene (ist leider etwas unklar), keine halbautomatische Parallelisierung von Schleifen. Es gibt nun einmal ungeheuer viele Möglichkeiten der Parallelisierung, daher ist die Frage nicht direkt beantwortbar.
-
Wie gesagt ich programmiere in C nicht in C++.
Die beiden aufgerufenen Funktionen sollen gemeinsam anfangen und gemeinsam enden.
Es soll während einer Bewegung ein Scan ausgeführt werden.
-
Ich habe meine beiden Softwarstücke bereits fertig es geht lediglich nur noch um die parallele Ausführung der beiden Komponenten.
-
Wie gesagt ich programmiere in C nicht in C++.
-
lol