Thread



  • Hallo ich lese gerade eine Tutorial über Threads aber das Tutorial ist in C geschrieben.

    Jetzt wollte ich einfach printf und so durch cout<< ersetzen aber sobald ich #include <iostream> deklariere fängt der Compiler an zu mekern -.-

    #include <iostream>  // ohne iostream funktioniert es aber dann kann ich ja kein cout<< benutzen >_<
    #include <windows>
    
    DWORD WINAPI Thread() 
    { 
            while(1)
            {
                    Sleep(20);
                  printf("thread");
            }
    
    }
    
    int main(int argc, char *argv[])
    {
    
    CreateThread(NULL, 0, Thread, NULL, 0, NULL);
    
            while(1)
            {
                    sleep(1);
                    printf("Hauptprogramm!\n");
            }
    
            return 0;
    }
    

    Fehler:

    Erzeugen
      [C++ Fehler] _mbstate.h(52): E2257 , erwartet
      [C++ Fehler] type_traits.h(64): E2453 Größe des Typs '__true_type' unbekannt oder Null
      [C++ Fehler] type_traits.h(65): E2453 Größe des Typs '__false_type' unbekannt oder Null
      [C++ Fehler] type_traits.h(68): E2141 Fehler in der Deklarationssyntax
      [C++ Fehler] type_traits.h(70): E2141 Fehler in der Deklarationssyntax
      [C++ Fehler] type_traits.h(73): E2141 Fehler in der Deklarationssyntax
      [C++ Fehler] type_traits.h(77): E2141 Fehler in der Deklarationssyntax
      [C++ Fehler] type_traits.h(82): E2141 Fehler in der Deklarationssyntax
      [C++ Fehler] type_traits.h(89): E2141 Fehler in der Deklarationssyntax
      [C++ Fehler] type_traits.h(90): E2141 Fehler in der Deklarationssyntax
      [C++ Fehler] type_traits.h(98): E2141 Fehler in der Deklarationssyntax
      [C++ Fehler] type_traits.h(107): E2141 Fehler in der Deklarationssyntax
      [C++ Fehler] type_traits.h(174): E2141 Fehler in der Deklarationssyntax
      [C++ Fehler] type_traits.h(200): E2141 Fehler in der Deklarationssyntax
      [C++ Fehler] type_traits.h(201): E2141 Fehler in der Deklarationssyntax
      [C++ Fehler] type_traits.h(204): E2141 Fehler in der Deklarationssyntax
      [C++ Fehler] type_traits.h(209): E2141 Fehler in der Deklarationssyntax
      [C++ Fehler] type_traits.h(210): E2141 Fehler in der Deklarationssyntax
      [C++ Fehler] type_traits.h(213): E2141 Fehler in der Deklarationssyntax
      [C++ Fehler] type_traits.h(224): E2141 Fehler in der Deklarationssyntax
      [C++ Fehler] type_traits.h(226): E2141 Fehler in der Deklarationssyntax
      [C++ Fehler] type_traits.h(228): E2141 Fehler in der Deklarationssyntax
      [C++ Fehler] type_traits.h(230): E2141 Fehler in der Deklarationssyntax
      [C++ Fehler] type_traits.h(232): E2141 Fehler in der Deklarationssyntax
      [C++ Fehler] type_traits.h(235): E2141 Fehler in der Deklarationssyntax
      [C++ Fehler] type_traits.h(235): E2228 Zu viele Fehlermeldungen oder Warnungen
    

    und dann öffnet der noch in meinem Borland Builder ein neues Editor Fenster dort wird dann diese Datei geöffnet _mbstate.h

    und darin steht dann:

    #ifndef _INTERNAL_MBSTATE_T
    #define _INTERNAL_MBSTATE_T
    
    #  define _STLP_USE_OWN_MBSTATE_T
    #  define _MBSTATE_T
    
    # ifdef _STLP_USE_OWN_MBSTATE_T
    
    // to be compatible across different SUN platforms
    #ifdef __sun
    # define __stl_mbstate_t __mbstate_t
    #endif
    
    struct __stl_mbstate_t;
    
    # ifdef __cplusplus
    struct __stl_mbstate_t { 
      __stl_mbstate_t( long __st = 0 ) { _M_state[0] = __st ; }
      __stl_mbstate_t& operator=(const long __st) {
        _M_state[0] = __st;              
        return *this;
      } 
      __stl_mbstate_t(const __stl_mbstate_t& __x) {_M_state[0]= __x._M_state[0]; }         
      __stl_mbstate_t& operator=(const __stl_mbstate_t& __x) {
        _M_state[0]= __x._M_state[0];              
        return *this;
      }
    # if defined (__sun)
    #  ifdef _LP64
      long _M_state[4];
    #  else
      int _M_state[6];
    #  endif
    # else       
      long _M_state[1];
    # endif
    };          
    
    inline bool operator==(const __stl_mbstate_t& __x, const __stl_mbstate_t& __y) {
      return ( __x._M_state[0] == __y._M_state[0] );
    }
    
    inline bool operator!=(const __stl_mbstate_t& __x, const __stl_mbstate_t& __y) {
      return ( __x._M_state[0] == __y._M_state[0] );
    }
    # endif
    
    _STLP_BEGIN_NAMESPACE
    
    typedef __stl_mbstate_t mbstate_t;
    
    _STLP_END_NAMESPACE
    
    # endif /* _STLP_USE_OWN_MBSTATE_T */
    
    #endif /* _INTERNAL_MBSTATE_T */
    

    Und das sagt mir nix. 😞



  • Mal über neuen Compiler nachdenken



  • Mal als C++ und nicht C Code compilieren



  • Vielleicht auch <windows.h> verwenden



  • Hat leider nicht funktioniert 😞

    Erzeugen
      [C++ Warnung] Unit1.cpp(12): W8066 Code wird nie erreicht
      [C++ Fehler] Unit1.cpp(20): E2034 Konvertierung von 'unsigned long (__stdcall *)()' nach 'unsigned long (__stdcall *)(void *)' nicht möglich
      [C++ Fehler] Unit1.cpp(20): E2342 Keine Übereinstimmung des Typs beim Parameter 'lpStartAddress' ('unsigned long (__stdcall *)(void *)' erwartet, 'unsigned long (__stdcall *)()' erhalten)
      [C++ Warnung] Unit1.cpp(29): W8066 Code wird nie erreicht
    

    Der Code:

    #include <iostream>
    #include <windows.h>
    
       DWORD WINAPI Thread()
       {
            while(1)
            {
                    Sleep(1);
                    std::cout<<"Thread\n";
            }
       return 0;
       }
    
    int main(int argc, char *argv[])
    {
    
    CreateThread(NULL, 0, Thread, NULL, 0, NULL);
    
            while(1)
            {
                    Sleep(1);
                    std::cout<<"Hallo, ich bin das Hauptprogramm!\n";
            }
    
    return 0;
    }
    


  • Die Signatur deiner Thread-Funktion stimmt nicht:

    DWORD WINAPI Thread(void*)
    


  • Jetzt funktioniert es :>

    ty


Anmelden zum Antworten