Funktion schritt für schritt ausführen, während programmlauf und ohne Debug
-
Nein das geht nicht (ohne weiteres). Ich glaube kaum, dass das eine moegliche Aufgabenstellung in der Praxis ist. Wahrscheinlich hast du einfach nur was falsch verstanden.
-
Da musst du weiter ausholen. Ziemlich weit. Du müsstest etwas einem Threadsystem vergleichbares emulieren. Dafür musst du spezielle Eigenschaften der Maschinensprache, in der die Funktion vorliegt, berücksichtigen, wodurch das ganze auch sehr unportabel wird.
Gegenfrage: Das was du vor hast ist sehr ungewöhnlich. Kannst du mal deine Motivation erläutern? Vermutlich gibt es bessere, deutlich einfachere Lösungen.
-
Also, ich wollte einfach mein eigenes (simples und primitives, lol) system schreiben, dass mehr zeugs gleichzeitig ausfüren kann. (und ja, ich habe da schon so gedacht es könnte was mit maschienen sprache zu tun haben...)
-
Geht so nicht. Lass es einfach.
-
Fellhuhn schrieb:
Geht so nicht. Lass es einfach.
Nee, danke. Ich bleib dran :3
-
Selbst wenn du so einen Kram machst wie den Funktionscode häppchenweise in andere Speicherbereiche zu kopieren und dann auszuführen, hast du immernoch das Problem mit dem Stack der invalide wird. Egal was du vor hast: lohnt nicht, bringt nichts, macht keinen Sinn.
-
"Mehr Zeugs gleichzeitig" ist gut... Du zerhackst die Funktionen und führst Teile hintereinander aus. Wenn du in Mathe gut bist, weißt du dass am Ende die gleiche Zeit flöten gegangen ist. Du brauchst sogar länger, weil du nen gewissen Overhead einbaust. Und parallel geht da gleich gar nix, denn deine Abarbeitung findet in einer einzigen Funktion statt, die dann dein ganzes Programm blockiert. Da kannst du die Funktionen gleich alle hintereinander ausführen.
Und eine wichtige Sache vergisst du komplett: Multiprozessorsysteme. Viel Spaß, wenn du selber versuchst, die einzelnen Funktionshappen auf mehrere Kerne zu verteilen, damit du wirklich parallele Abarbeitung erhältst

Und jetzt mal wieder ernst: Warum nicht threads verwenden? Das ist genau das was du haben willst und mit etwas Grundwissen (von dem du deutlich mehr brauchst, wenn du das echt selber hinbiegen willst - gib dir 2 Jahre...) kommst du da bald mit zurecht.
-
ok, ich werd's mit Threads versuchen. Kennt jemand gute toturials (MS Visual c++) oder kann mir welchen beispielcode mit möglichst viel commentaren geben ? Wär nett :3
-
l'abra d'or schrieb:
Und eine wichtige Sache vergisst du komplett: Multiprozessorsysteme. Viel Spaß, wenn du selber versuchst, die einzelnen Funktionshappen auf mehrere Kerne zu verteilen, damit du wirklich parallele Abarbeitung erhältst

Warum um Gottes Willen sollte er das tun? damit er ganze Cache-Inhalte zwischen den Kernen hin- und herschaufeln lässt?
Für das was er vorhat empfehle ich dem OP ein wenig ordentliche Lektüre über Compilerbau und Parallel-Abläufe. Das sollte ihn ein paar Monate beschäftigen...
-
Wahrscheinlich krieg ich jetzt (wieder) den Kopf abgeschlagen aber:
Google -> Windows Threads
Liefert dir als ersten Treffer die Windows Doku zum Thema. Und da gibts richtig viel zum Thema zu lesen, mit viel Beispielcode und viel Kommentaren darin.Willst du dich nicht nur auf Windows festlegen, kann ein Blick in Richtung boost.threads oder C++0x nicht schaden (der neue Standard soll ja Klassen für Threads enthalten).
-
pumuckl schrieb:
l'abra d'or schrieb:
Und eine wichtige Sache vergisst du komplett: Multiprozessorsysteme. Viel Spaß, wenn du selber versuchst, die einzelnen Funktionshappen auf mehrere Kerne zu verteilen, damit du wirklich parallele Abarbeitung erhältst

Warum um Gottes Willen sollte er das tun? damit er ganze Cache-Inhalte zwischen den Kernen hin- und herschaufeln lässt?
Weil es durchaus Betriebssysteme geben soll, die einzelne Threads auf verschiedene Kerne verteilen können. Ich wollte eigentlich nur darauf hinaus, dass es ziemlich aufwändig ist, die Effizienz von nativen Threads selber nachzubauen.
-
mal kurz eine Frage: Was sind eigentlich Handles, und wozu dienen diese ?
-
Du solltest dich bei deinem Kenntnisstand erstmal durch die Grundlagen arbeiten.
-
l'abra d'or schrieb:
pumuckl schrieb:
l'abra d'or schrieb:
Und eine wichtige Sache vergisst du komplett: Multiprozessorsysteme. Viel Spaß, wenn du selber versuchst, die einzelnen Funktionshappen auf mehrere Kerne zu verteilen, damit du wirklich parallele Abarbeitung erhältst

Warum um Gottes Willen sollte er das tun? damit er ganze Cache-Inhalte zwischen den Kernen hin- und herschaufeln lässt?
Weil es durchaus Betriebssysteme geben soll, die einzelne Threads auf verschiedene Kerne verteilen können. Ich wollte eigentlich nur darauf hinaus, dass es ziemlich aufwändig ist, die Effizienz von nativen Threads selber nachzubauen.
Einzelne Threads, die jeweils ihren eigenen Stack haben, ja. Aber nicht einzelne Funktionshappen, wo dann ständig zumindest der Stackframe der Funktion und einiges mehr an referenzierten Daten zwischen den verschiedenen Kernen und ihren Caches hin- und her- hoppeln müsste.
-
pumuckl schrieb:
l'abra d'or schrieb:
pumuckl schrieb:
l'abra d'or schrieb:
Und eine wichtige Sache vergisst du komplett: Multiprozessorsysteme. Viel Spaß, wenn du selber versuchst, die einzelnen Funktionshappen auf mehrere Kerne zu verteilen, damit du wirklich parallele Abarbeitung erhältst

Warum um Gottes Willen sollte er das tun? damit er ganze Cache-Inhalte zwischen den Kernen hin- und herschaufeln lässt?
Weil es durchaus Betriebssysteme geben soll, die einzelne Threads auf verschiedene Kerne verteilen können. Ich wollte eigentlich nur darauf hinaus, dass es ziemlich aufwändig ist, die Effizienz von nativen Threads selber nachzubauen.
Einzelne Threads, die jeweils ihren eigenen Stack haben, ja. Aber nicht einzelne Funktionshappen, wo dann ständig zumindest der Stackframe der Funktion und einiges mehr an referenzierten Daten zwischen den verschiedenen Kernen und ihren Caches hin- und her- hoppeln müsste.
Das passiert bei fast jedem OS eigentlich "dauernd".
Aber natürlich nicht parallel, klar dass immer nur ein "Core" an einem logischen Thread nuckeln kann.
-
lk schrieb:
mal kurz eine Frage: Was sind eigentlich Handles, und wozu dienen diese ?
Weiß keiner so genau
-
lk schrieb:
mal kurz eine Frage: Was sind eigentlich Handles, und wozu dienen diese ?
Üblicherweise sind das so etwas ähnliches, wie Zeiger. Also eine Referenz auf ein Objekt.
-
Handles sind sind Referenzen fuer Objekte, die das Betriebssystem bereitstellt, und du mittels Betriebssystemfunktionen manipulieren (arbeiten) kannst.
-
knivil schrieb:
Handles sind sind Referenzen fuer Objekte, die das Betriebssystem bereitstellt, und du mittels Betriebssystemfunktionen manipulieren (arbeiten) kannst.
Das sind Betriebssystem-Handles. Weil sie das Betriebssystem bereitstellt. Es kann aber auch andere Systeme geben (irgendeine Bibliothek), die mit Handles arbeiten.
Beispiel:
Eine Client-Server Architektur, bei der Server ein bestimmtes Objekt erzeugt und der Client damit arbeiten darf. Bei einer nicht geteilten Architektur würde der Server dem Client einfach einen Pointer oder eine Referenz liefern und der Client arbeitet selber lustig mit den Methoden des Objektes. Läuft das ganze aber auf zwei verschiedenen Rechnern, geht das nicht. Dann muss der Client beispielsweise sagen "Hey Server, ändere mal ab Objekt XY die Namensvariable", statt einen Pointer auf XY muss er dem Server z.B. eine ID des Objektes geben (die er vorher vom Server bekommen hat). Diese IDs werden auch Handle genannt.
-
Interessanter Aspekt, ich persoenlich wuerde einfach ObjektId sagen, aber Handle wuerde ich auch passend finden. Damit ist ein Handle dann leider irgendwie alles und nichts.