Alt 14.04.2011, 19:25:47   #1 (permalink)
mammut

Reg: 25.05.2007
Beiträge: 799
gamemammut befindet sich auf einem aufstrebenden Ast
Standard "Multitasking" in C++

Hallo,

"Multitasking" ist vielleicht das falsche Wort, aber mir fällt nicht ein wie ich es sonst nennen soll. Vielleicht könnt Ihr mir ja ein Stichwort nennen, mit dem ich dann evtl. auch google fragen kann.

Und zwar möchte ich zum Beispiel in einem Programm Ziffern hochzählen lassen, gleichzeitig möchte ich aber noch andere Aktionen ausführen, Beispielsweise 2 Werte eingeben lassen und diese addieren.
Der Zähler soll aber immer hochzählen, auch wenn grad keine Tasteneingabe stattfindet.

Könnt Ihr mir da ein paar Tipps, oder Denkanstöße geben. Bin noch Anfänger in Sachen C++.
gamemammut ist offline   Mit Zitat antworten
Gesponsorte Links
Alt 14.04.2011, 19:31:12   #2 (permalink)
bekämpft die Mächte des Bösen
Benutzerbild von theHacker

ID: 69505
Lose-Remote

theHacker eine Nachricht über ICQ schicken theHacker eine Nachricht über AIM schicken theHacker eine Nachricht über MSN schicken theHacker eine Nachricht über Yahoo! schicken theHacker eine Nachricht über Skype™ schicken
Reg: 20.04.2006
Beiträge: 20.468
theHacker genießt hohes AnsehentheHacker genießt hohes AnsehentheHacker genießt hohes AnsehentheHacker genießt hohes AnsehentheHacker genießt hohes AnsehentheHacker genießt hohes AnsehentheHacker genießt hohes AnsehentheHacker genießt hohes AnsehentheHacker genießt hohes AnsehentheHacker genießt hohes AnsehentheHacker genießt hohes Ansehen
Standard

Ja, das is Multitasking.
Das Zauberwort, was du in Google eingibst, is "Thread".

Aber Tipp: Wenn du die Sprache noch gar nicht beherrscht, ist Multitasking der falsche Start.
theHacker ist offline   Mit Zitat antworten
Alt 14.04.2011, 20:13:11   #3 (permalink)
mammut

Reg: 25.05.2007
Beiträge: 799
gamemammut befindet sich auf einem aufstrebenden Ast
Standard

Das ist ja dann doch schon etwas Komplexer.

Hab bis jetzt nur etwas in C gemacht, um mal ein paar Leds oder Led-Matrix an µC anzusteuern. Jetzt ist in der Schule C++ dazugekommen, ich denke aber nicht das wir bis zum Multitasking kommen werden.
gamemammut ist offline Threadstarter   Mit Zitat antworten
Alt 14.04.2011, 20:34:48   #4 (permalink)
bekämpft die Mächte des Bösen
Benutzerbild von theHacker

ID: 69505
Lose-Remote

theHacker eine Nachricht über ICQ schicken theHacker eine Nachricht über AIM schicken theHacker eine Nachricht über MSN schicken theHacker eine Nachricht über Yahoo! schicken theHacker eine Nachricht über Skype™ schicken
Reg: 20.04.2006
Beiträge: 20.468
theHacker genießt hohes AnsehentheHacker genießt hohes AnsehentheHacker genießt hohes AnsehentheHacker genießt hohes AnsehentheHacker genießt hohes AnsehentheHacker genießt hohes AnsehentheHacker genießt hohes AnsehentheHacker genießt hohes AnsehentheHacker genießt hohes AnsehentheHacker genießt hohes AnsehentheHacker genießt hohes Ansehen
Standard

Zitat:
Zitat von gamemammut Beitrag anzeigen
Das ist ja dann doch schon etwas Komplexer.
Es is halt eine ganz andere Denkweise, wenn du mehrere Threads parallel hast.

Um mal ein Beispiel zu machen. Stell dir vor, du hast 2 Threads, die parallel ablaufen. Thread 1 inkrementiert eine Variable. Thread 2 gibt die Variable aus.
PHP-Code:
1:
2:
3:
4:
5:
6:
7:
8:
9:
int foo 0;

void thread1() {
  
foo++;
}

void thread2() {
  
printf("foo = %d\n"foo);

Ohne groß nachzudenken, geht man davon aus, dass die Ausgabe
Code:
1:
2:
3:
4:
5:
6:
7:
foo = 1 foo = 2 foo = 3 foo = 4 foo = 5 foo = 6 ...
sein wird.

Tatsächlich kann aber sowas rauskommen:
Code:
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
foo = 0 foo = 1 foo = 2 foo = 2 foo = 4 foo = 6 foo = 5 foo = 154572458 foo = -5787547 foo = 42 ...
theHacker ist offline   Mit Zitat antworten
Alt 14.04.2011, 21:19:34   #5 (permalink)
return void
Benutzerbild von ice-breaker

ID: 93995
Lose-Remote

ice-breaker eine Nachricht über ICQ schicken
Reg: 27.04.2006
Beiträge: 6.026
ice-breaker genießt hohes Ansehenice-breaker genießt hohes Ansehenice-breaker genießt hohes Ansehenice-breaker genießt hohes Ansehenice-breaker genießt hohes Ansehenice-breaker genießt hohes Ansehenice-breaker genießt hohes Ansehenice-breaker genießt hohes Ansehenice-breaker genießt hohes Ansehenice-breaker genießt hohes Ansehenice-breaker genießt hohes Ansehen
Standard

Zitat:
Zitat von theHacker Beitrag anzeigen
Ohne groß nachzudenken, geht man davon aus, dass die Ausgabe sein wird.[...]
du solltest wenn du solch ein Beispiel bringst auch den Grund nennen, sonst machst du Threads zu einem Mysterium.

Ohne korrekte Synchronisierung, die wirklich nicht einfach ist, können viele Fehler auftreten, die sehr schwer zu finden sind.
In theHackers Beispiel haben wir das Problem, dass er auf die Variable ohne Synchronisierung zugegrifen hat, dadurch kann ein Thread auf alte Werte aus dem Arbeitsspeicher zugreifen (lesend) während der andere in die Register der CPU schreibt und die Werte nur selten in den Arbeitsspeicher kopiert werden, dadurch sieht der lesende Thread unter Umständen falsche (alte) Werte: stale Data


"Die Wahrheit entgeht dem, der nicht mit beiden Augen sieht." -Orici
ice-breaker ist offline   Mit Zitat antworten
Alt 15.04.2011, 20:53:17   #6 (permalink)
Oben bleiben!

ID: 291199
Lose-Remote

Reg: 18.07.2007
Beiträge: 1.532
dubberle genießt hohes Ansehendubberle genießt hohes Ansehendubberle genießt hohes Ansehendubberle genießt hohes Ansehendubberle genießt hohes Ansehendubberle genießt hohes Ansehendubberle genießt hohes Ansehendubberle genießt hohes Ansehendubberle genießt hohes Ansehendubberle genießt hohes Ansehendubberle genießt hohes Ansehen
Standard

Du könntest sowas auch ohne Multitasking schreiben, aber dann wird's furchtbar kompliziert, etwa so

Code:
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
while (true) { ist eine Taste gedrückt? ja: ist es die Returntaste? ja: dann ist der Eingabestring zu ende nein: füge das Zeichen zum Eingabestring hinzu weiterzählen; }
Das ganze kann noch beliebig verkompliziert werden, beispielsweise indem man das letzte Zeichen im eingabestring löscht, wenn die Backspacetaste gedrückt wurde...
Jede Minute verstreichen in Afrika ganze 60 Sekunden.
Kopiere dies in Deine Signatur, wenn Du Maultaschen magst.
Mein Stern: epsilon carinae
dubberle ist offline   Mit Zitat antworten
Antwort

Gesponsorte Links

Anzeige


Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)
 
Themen-Optionen
Ansicht

Forumregeln
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks sind an
Pingbacks sind an
Refbacks sind an


Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
Reftausch: Du zu "EuroFriend", "Klammgeil Anteils VMS" oder "LoseluX", ich zu ... ralf2511 Rallys, Refhandel, Reftausch & anderes 26 23.02.2009 15:12:38
Bis zum 24 gibts Sofort "7mio" + bis zu 100%RB + Userrally / Komm nach "Losegier" / Mach mit bei den Super rallys / brandi32 Lose4Refs (erledigt) 50 24.12.2008 14:55:44
Game Boy spiele "DuckTalers 2", "Super Mario Land", "Goal!" Bani Lose4Misc 1 13.03.2007 10:34:57
[B] Mailtausch-Addon "S-Slot" und "50/50-Game" UND "1 aus 10" *NEU* Anstaltsleiter Lose4Scripts (erledigt) 11 14.02.2007 10:38:12
Thunderbird "Trash", "Sent"; "INBOX" - Ordner umbenennen. Wie? Fengar Software/Windows 2 24.06.2006 08:39:06


Alle Zeitangaben in WEZ +1. Es ist jetzt 18:00:49 Uhr.