Anfänger versucht sich an Threads



  • Den Code habe ich mehr oder weniger aus Wikipedia kopiert:

    #include <cstdlib>
    #include <iostream>
    #include <winbase.h>
    
    using namespace std;
    
    void runInThread();
    
    int main(int argc, char *argv[]) {   
      unsigned long threadId;
      HANDLE hThread = CreateThread(
                         NULL, 2000, (LPTHREAD_START_ROUTINE)runInThread, p1, p2, &threadId
                       );
      for(int i=0;i<20;++i) {
        printf("Ich komme aus main!");
      }
      system("PAUSE");
      return EXIT_SUCCESS;
    }
    
    void runInThread() {
      for(int i=0;i<20;++i) {
        printf("Ich komme aus runInThread!");
      }
    }
    

    Nachdem ich das mit Dev-C++ kompilieren wollte, kamen haufenweise Fehlermeldungen, die was mit winbase.h zu tun hatten. In der Form "'XY' does not name a type".
    Irgendwo habe ich mal gehört, dass man in C++ statt includefile.h cincludefile schreibt. Aber das behebt den Fehler nicht. cwinbase gibt es gar nicht.
    Mein Testprogramm sollte ein paar mal hintereinander vermischt die beiden Texte ausgeben.



  • Du musst <windows.h> einbinden, da ist die <winbase.h> gleich mit drin 🙂



  • Toll! Danke! Juhu, ich kann Threads. Warum machen alle immer so ein Mysteruim daraus?

    👍



  • Threads zu erstellen ist nicht so schwer - aber deine Klassen Threadsave hinzubekommen ist was ganz anderes ^^



  • Dieser Thread wurde von Moderator/in HumeSikkins aus dem Forum C++ in das Forum WinAPI verschoben.

    Im Zweifelsfall bitte auch folgende Hinweise beachten:
    C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?

    Dieses Posting wurde automatisch erzeugt.



  • Noch ein paar Dinge zu Deinem Code:
    1.

    #include <iostream>
    

    ist überflüssig.
    2.

    using namespace std;
    

    ebenfalls.
    3. Statt 'CreateThread' solltest Du lieber _beginthreadex verwenden (dazu brauchst Du den Header <process.h>).
    4. Wenn Du alles richtig gemacht hast kannst Du den Cast im Aufruf von 'CreateThread' weglassen:

    (LPTHREAD_START_ROUTINE)runInThread
    

    , würde ich Dir dringstens empfehlen... 😉 . Damit kann man nämlich unbeabsichtigt Fehler 'verstecken'.

    obbba schrieb:

    Irgendwo habe ich mal gehört, dass man in C++ statt includefile.h cincludefile schreibt. Aber das behebt den Fehler nicht. cwinbase gibt es gar nicht.
    Mein Testprogramm sollte ein paar mal hintereinander vermischt die beiden Texte ausgeben.

    Da liegt Du vollkommen richtig! In C++ verwendet man auch <cdateiname> anstatt <dateiname.h>. Allerdings ist <winbase.h> (wie Badestrand aber schon gesagt hat, besser <windows.h>) kein C++, sondern C ➡ Die Win32-API ist nämlich komplett in C geschrieben 😉 .



  • @obbba-bobba: Schreib doch mal ein Programm welches Threads für irgendwas sinnvolles einsetzt. Dann zähle ich dir die 10-20 Fehler auf die du gemacht hast, und dann reden wir weiter, ja 🙂


Anmelden zum Antworten