Ergebnis 1 bis 8 von 8
  1. #1
    Ich mag eig keine Bananen Avatar von B4n4n4
    Registriert seit
    02.02.2010
    Beiträge
    291

    Standard Absturz verhindern & zwei Dinge synchron ablaufen lassen

    Hallo ich bin es mal wieder

    Meine Probleme heute?

    1) Wenn ich eine integer Variable erstelle die durch "cin >> var;" eingegeben werden soll, ich allerdings einen Buchstaben eingebe führt das bei mir unweigerlich zu totalem Chaos!
    Was mich dabei wundert ist das ich eine Schleife verwende die so lange läuft bis die eingegebene Zahl zwischen 1 und 7 liegt, und über if ausgibt das nur Zahlen von 1-7 eingegeben werden sollen.
    Solange ich eine zu hohe/niedrige Zahl eingebe funktioniert das wunderbar, wird in einer integer Variable ein Zeichen nicht einfach als ASCII Zahl des entsprechenden Zeichens gespeichert?
    Statt aber wie gewünscht zu funktionieren wird endlos "Bitte nur 1-7 eingeben!" ausgegeben.

    Hier mal Quellcode:
    Code:
    int eingabe=0;
            while(eingabe<1 || eingabe>7)
            {
            cin >> eingabe;
            if(eingabe<1 || eingabe>7)
                cout << "Bitte nur 1-7 eingeben!" << endl;
            };
    2) Mein Programm soll alle X Sekunden etwas tun. Dies habe ich durch "Sleep(X);" in einer Schleife realisieren können. Wie kann ich aber nun eine weitere Schleife gleichzeitig laufen lassen, die alle Y Sekunden etwas anderes tut? Oder lässt sich das ganze in einer Schleife realisieren? Die beiden Sekunden angaben sollen nämlich frei wählbar sein.

    Freue mich auf hilfreiche Antworten (hoffentlich wieder von BB, unserem zynischen C Guru ),

    B4n4n4
    Zitat Zitat von Noob2323 Beitrag anzeigen
    Ich suche einen Klauer für ein Steampasswort, den man als Virus tarnen kann. Also das Viruserkennerprogramm sollte aschlagen und laute Töne von sich geben, damit er dann aus Verwirrtheit meinen Klauer ausführt?
    Cheater : 8=o
    Normaluser : 8=======o
    AlterHacker : 8================o

    Ich : 8=============================o

  2. #2

    Registriert seit
    17.06.2009
    Beiträge
    559

    Standard

    Hi,

    Das was du da bei 1) machst ist ziemlich gefährlich, du solltest nach jedem Einlesen immer den Status des Streams überprüfen (und ggf. zurücksetzen), da sonst einige unvorhergesehende Dinge passieren können.
    Ih würde das hier vorschlagen (ich weiss es geht schöner, ohne Endlosschleife und so ):
    Code:
    {
        int eingabe;
    
        for(;;) {
            cout << "Bitte Zahl zwischen 1 und 7 eingeben: ";
            cin >> eingabe;
            if(cin.fail())
                cout << "Keine Zahl!" << endl;
            else if(eingabe < 1 || eingabe > 7)
                cout << "Keine Zahl zwischen 1 und 7!" << endl;
            else
            {
                cout << "Alles Klar!" << endl;
                break;
            }
            cin.clear();
            cin.ignore(INT_MAX, '\n');
        }
        cout << "Eingabe: " << eingabe << endl;
    }
    Bei 2) brauchst du dann wohl Threading.

  3. Folgende Benutzer haben sich für diesen Beitrag bedankt:

    B4n4n4 (10.11.2010)

  4. #3
    Ich mag eig keine Bananen Avatar von B4n4n4
    Registriert seit
    02.02.2010
    Beiträge
    291

    Standard

    Vielen Dank für Antwort 1 !!

    Zu 2:

    Nur mal fragen ob ich das mit den Threads richtig verstanden habe.
    Code:
    DWORD WINAPI banane(LPVOID); //definiert den Thread
    
    HANDLE hThread;
    DWORD  dwThreadID;
    hThread = CreateThread(NULL,0,banane,0,0,&dwThreadID);
    CloseHandle(hThread); //ruft den Thread auf (bedeutet was?)
    
    DWORD WINAPI banane(LPVOID data) //gibt dem Thread eine Funktion.
    {
            cout << "Das kommt aus dem Thread!" << endl;
    };
    Muss ich den Thread also erst aufrufen bevor ich ihm Befehle zuweisen kann?
    Zitat Zitat von Noob2323 Beitrag anzeigen
    Ich suche einen Klauer für ein Steampasswort, den man als Virus tarnen kann. Also das Viruserkennerprogramm sollte aschlagen und laute Töne von sich geben, damit er dann aus Verwirrtheit meinen Klauer ausführt?
    Cheater : 8=o
    Normaluser : 8=======o
    AlterHacker : 8================o

    Ich : 8=============================o

  5. #4
    Der `Toastflüsterer` Avatar von AlterHacker
    Registriert seit
    27.09.2008
    Beiträge
    690

    Standard

    Code:
    DWORD WINAPI banane(LPVOID); //definiert die Banane-Funktion
    
    HANDLE hThread;
    DWORD  dwThreadID;
    hThread = CreateThread(NULL,0,banane,0,0,&dwThreadID); //Erstellt den Thread.
    CloseHandle(hThread); //Gibt das Handle frei und beendet nicht den Thread
    DWORD WINAPI banane(LPVOID data) //Definiert den Funktionskörper von banane. ;)
    {
            cout << "Das kommt aus dem Thread!" << endl;
    };
    Geändert von AlterHacker (10.11.2010 um 21:59 Uhr) Grund: Fehler behoben, danke wacked^^

    Security is an illusion.
    Cheater : 8=o
    Normaluser : 8=======o
    Ich : 8================o

    BM: (4|2|0)

  6. Folgende Benutzer haben sich für diesen Beitrag bedankt:

    B4n4n4 (10.11.2010)

  7. #5
    Bad Times Virus
    Registriert seit
    14.03.2009
    Beiträge
    579

    Standard

    Falsch.
    Code:
    #include <windows.h>
    #include <iostream>
    using namespace std;
    DWORD WINAPI banane(LPVOID); //definiert den Thread
    int main()
    {
        HANDLE hThread;
        DWORD  dwThreadID, dwExitCode;
    
        hThread = CreateThread(NULL,0,banane,0,0,&dwThreadID);
        CloseHandle(hThread);
        cout << "CloseHandle(hThread)" << endl;
        Sleep(5000);
        GetExitCodeThread(hThread, &dwExitCode);
        if(GetLastError() != ERROR_INVALID_HANDLE)
            cout << "Well, that was unexpected" << endl;
        cout << " Exit code " << dwExitCode << endl;
    }
    DWORD WINAPI banane(LPVOID data) //gibt dem Thread eine Funktion.
    {
        while(1)
        {
            cout << "Das kommt aus dem Thread!" << endl;
            Sleep(100);
        }
    };
    In diesem Bild sieht man das der Thread noch weiterläuft. (Außerdem sieht man direkt eine Gefahr des Multithreadings. Da die beiden couts "gleichzeitig" ablaufen wird der Text gemixt ausgegeben.)

    CloseHandle() bewirkt nur dass man mit diesem Handle (Handle wie der Halter an der Tasse) nichts mehr anfangen kann. Wenn danach etwas mit diesem Handle gemacht werden soll (GetExitCodeThread()) merkt diese Funktion dass dieses Handle ungültig ist und bricht ab.

  8. Folgende Benutzer haben sich für diesen Beitrag bedankt:

    B4n4n4 (10.11.2010)

  9. #6
    DateMake Dialer Avatar von Dj Hackmaster A
    Registriert seit
    02.11.2010
    Beiträge
    115

    Standard

    Generell "sollte" man einen Thread nicht von außen terminieren. Wenn man das doch machen möchte, dann natürlich mit TerminateThread, das Handle hat selbstverständlich keine Auswirkung auf den Exekutionskontext des Threads.
    Zitat Zitat von Shadowgamer
    Und solch sinnlosen Kommentare kannst du dir doch bitte sparen. Denn so merkt erst recht jeder das du, nicht nur Körperlich sondern auch Geistig, noch ein kleines Kind und auf dem Nivou eines Sonderschülers bist.
    Rätsel und obligatorischer Haftungsausschluss:

    "Ich muss niemanden anerkennen, der vom Staat lebt, diesen Staat ablehnt, für die Ausbildung seiner Kinder nicht vernünftig sorgt und ständig neue kleine Kopftuchmädchen produziert."

  10. Folgende Benutzer haben sich für diesen Beitrag bedankt:

    B4n4n4 (10.11.2010)

  11. #7
    Trojaner Avatar von motion
    Registriert seit
    12.09.2010
    Beiträge
    81

    Standard

    Du könntest den ganzen Multithreading Spaß auch mit Boost realisieren, ist glaub ich einfacher und vor allem Plattformunabhängig:
    Highscore - Die Boost C++ Bibliotheken - Multithreading
    contact:
    :->moti0n[at]inbox[dot]ru - PGP-public_key
    :->motion@jabber.ccc.de

  12. Folgende Benutzer haben sich für diesen Beitrag bedankt:

    B4n4n4 (10.11.2010)

  13. #8
    Ich mag eig keine Bananen Avatar von B4n4n4
    Registriert seit
    02.02.2010
    Beiträge
    291

    Standard

    motion, tut mir wirklich Leid das man nur einmal "THX" drücken kann

    Die "normalen" Threads haben zwar so langsam angefangen sich verstehen zu lassen, aber je einfacher umso besser

    Freundlich Grüßt,

    die Banane vom Dienst

    @wacked

    Dein Quellcode tut zwar genau das was er soll, wenn ich ihn allerdings kompiliere stürzt jedesmal ein Spiel mit folgender Fehler Meldung ab:

    Access violation at adress 0047644A in module 'noaex.dat'. Read of address 00000000.
    Geändert von B4n4n4 (10.11.2010 um 21:57 Uhr) Grund: Automerged Doublepost
    Zitat Zitat von Noob2323 Beitrag anzeigen
    Ich suche einen Klauer für ein Steampasswort, den man als Virus tarnen kann. Also das Viruserkennerprogramm sollte aschlagen und laute Töne von sich geben, damit er dann aus Verwirrtheit meinen Klauer ausführt?
    Cheater : 8=o
    Normaluser : 8=======o
    AlterHacker : 8================o

    Ich : 8=============================o

Ähnliche Themen

  1. Antworten: 7
    Letzter Beitrag: 24.10.2010, 23:55
  2. [S] 2 Dinge
    Von KayJay im Forum .NET Sprachen - Techniken
    Antworten: 7
    Letzter Beitrag: 10.04.2009, 00:15
  3. Avatar und Signatur laufen nicht synchron
    Von Mars im Forum GFX Angebote & Wünsche
    Antworten: 2
    Letzter Beitrag: 24.10.2008, 00:58

Stichworte

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •