quasi-parallelität benötigt..



  • Christoph schrieb:

    Wenn du eine normale CPU mit einem Core hast, muss die Schleife zwangsläufig pausiert werden, sobald du etwas anderes machst. Bei einem Dual-Core (oder besser) kannst du mit Multithreading beides parallel laufen lassen...

    ääääh... multithreading geht auch mit single-cores.
    🙂



  • fricky schrieb:

    Christoph schrieb:

    Wenn du eine normale CPU mit einem Core hast, muss die Schleife zwangsläufig pausiert werden, sobald du etwas anderes machst. Bei einem Dual-Core (oder besser) kannst du mit Multithreading beides parallel laufen lassen...

    ääääh... multithreading geht auch mit single-cores.
    🙂

    Hab ich nicht bestritten.

    Multithreading auf Single-Core sieht halt so aus, dass nur ein Thread gleichzeitig läuft. Die Schleife des Originalposters wird dann also zwangsläufig pausiert.



  • fricky schrieb:

    Christoph schrieb:

    Wenn du eine normale CPU mit einem Core hast, muss die Schleife zwangsläufig pausiert werden, sobald du etwas anderes machst. Bei einem Dual-Core (oder besser) kannst du mit Multithreading beides parallel laufen lassen...

    ääääh... multithreading geht auch mit single-cores.
    🙂

    lies den post nochmal



  • Shade Of Mine schrieb:

    lies den post nochmal

    ihr habt ja recht. war ein missverständnis meinerseits, 'tschuldigung.
    🙂



  • just-another-programmer schrieb:

    ich habe eine funktion, die in eine endlosschleife mündet. nun soll in dieser schleife von zeit zu zeit eine andere funktion aufgerufen werden ( wegen logfiles). die schleife sollte aber währenddessen weiterlaufen.
    kann man das irgendwie realisieren?

    Ja - wenn man die Schleife auflöst und den Body der Schleife als Funktion realisiert, die immer wieder von einer übergeordneten 'Prozessor-Endlos-Schleife' aufgerufen wird. Das Prinzip heißt 'Kooperatives Multitasking'. In der Prozessor-Schleife prüfst Du bei jedem Durchlauf ob eine bestimmte Bedingung erfüllt ist und rufst die entsprechende Funktion auf.

    Das kann man auch sehr schön mit einer Event-Queue kombinieren. Die Events kannst Du Dir selber bauen - kann ein int sein. Die Prozessor-Schleife schaut in der Queue nach ob ein Event drin ist, holt es raus (pop()) und ruft den zugehörigen 'Handler' auf. Das ist im einfachsten Fall ein schnöder "switch( eventIdx ){case 123:". Falls die Queue leer ist wird eine Idle-Funktion aufgerufen. Das wäre z.B. der Body Deiner ursprünglichen Endlos-Schleife.
    So kann man auch nach einer bestimmten Zeit (oder Anzahl Durchläufen) die Queue mit einem Event füllen (posten -> push-Methode) und die Prozessor-Schleife reagiert dann entsprechend.

    Das wäre dann ein selbst gebauter Timer.

    Gruß
    Werner



  • Cooperative Multitasking lässt sich sehr schön und sehr leicht implementieren und ist ungeheuer praktisch wenn man immer eine endlose Abfolge bestimmter Tätigkeiten durchführen möchte.
    Man muss seine internen Prozesse natürlich freundlich programmieren, damit es keine Blockade gibt.

    Wenn du etwas mehr Zeit und Mühe investieren willst würde ich aber gleich noch preemptive Multithreading mitintegrieren, so dass beide Prozessarten über ein einheitliches Subsystem kontrolliert werden können.

    Natürlich muss man bei den preemptiv Prozessen für Synchronisierung sorgen, aber das dürfte klar sein.



  • ahh vielen dank euch allen, das hört sich ganz nach der lösung zu meinem problem an, was werner salomon da geschrieben hat 😃



  • Dann wird aber deine schleife aber auch pausiert solange eine andere funktion ausgeführt wird...... das beides parallel ohne hackeln und zuckeln kontinuierlich läuft brauchtst (wie erwähnt) nen dualcore^^



  • AntoterOption schrieb:

    Dann wird aber deine schleife aber auch pausiert solange eine andere funktion ausgeführt wird...... das beides parallel ohne hackeln und zuckeln kontinuierlich läuft brauchtst (wie erwähnt) nen dualcore^^

    und kontrolle über die prozessverwaltung des betriebssystems 🙂



  • das sowieso;) Gibt eigentlich noch nich die möglichkeit durch erzeugen einen threads die core anzugeben?


Anmelden zum Antworten