C problem



  • hallo liebe c programmierer, ich brauche mal eure hilfe. bin absoluter neuling auf den gebiet und benutze kein linux. aus diesem grund habe ich mingw installiert
    und konnte auch mein erstes hallo welt zum laufen bringen. ich muß was mit threadsmachen und habe versucht diesn file zum laufen zu bekommen

    #include <stdio.h>
    #include <pthread.h>
    
    void *print_char (void *ch)
    {
      int i;
      for (i=0; i<10; i++)
        printf ("%c", *(char*)ch);
      return NULL;
    }
    
    int main ()
    {
      char ch1='-', ch2='*';
      pthread_t p1, p2;
    
      pthread_create (&p1, NULL, print_char, &ch1);
      pthread_create (&p2, NULL, print_char, &ch2);
    
      pthread_join (p1, NULL);
      pthread_join (p2, NULL);
    
      printf ("\n");
      return 0;
    }
    

    mit gcc -D_REENTRANT beispiel1.c -lpthread
    bekomme folgende fehlermeldung:
    beispiel1.c:2:21: pthread.h: No such file or directory
    beispiel1.c:4: error: syntax error before "th"
    beispiel1.c:4: warning: data definition has no type or storage class
    ich hoffe es kann mir jemand weiterhelfen danke gruß



  • Suche mal deine Festplatte ab, ob du den Header pthread.h findest.

    Welchen MinGW hast du drauf?

    Der MinGW der mit Code::Blocks 10.5 kommt, gcc 4.4.1, hat den Header dabei.

    MfG f.-th.



  • hi ,danke habe jetzt code blocks 10.5 installiert, habe immer selbe problem

    obj\Debug\main.o||In function main':| C:\\Users\\Desktop\\c\\beispiel1\\main.c|18|undefined reference to_imp__pthread_create'|
    C:\\Desktop\beispiel1\main.c|20|undefined reference to \_imp\_\_pthread_join'| C:\\Users\\Desktop\\c\\beispiel1\\main.c|21|undefined reference to_imp__pthread_join'|
    ||=== Build finished: 4 errors, 0 warnings ===|

    schick mal mir bitte download link oder muß ich irgendwo die library einfügen?
    gruß



  • ich danke dir für deinen super ratschlag mit code blocks. das ist eine super entwicklungsumgebung die sehr stark an eclipse erinnert ,somit fühle ich mich heimisch. problem gelöst mußte einfach build properties -> linkins setter ->
    lipthread reinschreiben und da war er zufrieden. das war aber nur gut glück und verzweiflung, da ich immer nach einer library lipthread. jar oder .c gesucht habe,aber einfach nur lipthread angeben das ist ja schon fast zauberei. wie gesagt c absolutes neuland für mich. ich danke dir recht herzlich für die umgebung.
    gruß dany



  • Danke für die Erfolgsmeldung 😉

    Zu deiner Fehlerbeschreibung - es waren nicht die selben Fehler:
    Erst fand dein Compiler die Headerdatei nicht
    und nachdem er die fand, suchte der Linker die Bibliothek,
    die du ihm ja anschliessend bekannt gemacht hattest.

    Das Ergebnis ist zwar in beiden Fällen, das keine ausführbare Datei erstellt wird, aber die Vorgehensweise zur Fehlerbeseitigung ist ist nicht die selbe 😉

    Wenn du in Zukunft ähnliche Fehlermeldungen bekommst, weisst du dann ja wo du erst prüfen solltest 😉

    MfG f.-th.



  • hi, ich brauche noch mal deine hilfe und zwar versuche ich ein neues beispielprogramm auszuprobieren ich möchte gerne das jeder thread dich nach einer eingabe fragt, zuerst der 1thread dann der 2 thread und dann beide threads sich ausgegebn selbe reihenfolge, weiß aber nicht warum er das sleep nicht gut findet, gibt es dafür ebenfalls eine library die ich einbinden muß?

    #include <stdio.h>
    #include <unistd.h>
    #include <pthread.h>
    
    pthread_mutex_t mutex;
    char ch;
    
    void *print_stern (void *dummy)
    {
      pthread_mutex_lock (&mutex);
      ch = '*';
      sleep (1);
      printf ("%c\n", ch);
      pthread_mutex_unlock (&mutex);
      return NULL;
    }
    
    void *print_minus (void *dummy)
    {
      pthread_mutex_lock (&mutex);
      ch = '-';
      sleep (1);
      printf ("%c\n", ch);
      pthread_mutex_unlock (&mutex);
      return NULL;
    }
    
    int main ()
    {
      pthread_t p1, p2;
    
      pthread_mutex_init (&mutex, NULL);
    
      pthread_create (&p1, NULL, print_minus, NULL);
      pthread_create (&p2, NULL, print_stern, NULL);
    
      pthread_join (p1, NULL);
      pthread_join (p2, NULL);
    
      return 0;
    }
    

    Fehlermeldung:
    C:\Desktop\c\beispiel1\main.c||In function 'print_stern':|
    C:\Desktop\c\beispiel1\main.c|12|warning: implicit declaration of function 'sleep'|
    obj\Debug\main.o||In function print_stern':| C:\\Desktop\\c\\beispiel1\\main.c|12|undefined reference tosleep'|
    obj\Debug\main.o||In function print_minus':| C:\\Desktop\\c\\beispiel1\\main.c|22|undefined reference tosleep'|
    ||=== Build finished: 2 errors, 1 warnings ===|
    gruß dany



  • sleep ?

    Da hast du dir etwas ausgesucht 😃

    Ist unter anderem compiler- und betriebssystemspezifisch.

    Unter Windows mit dem entsprechenden Header schau mal unter Sleep



  • Nachtrag - du hast die Linux-Variante erwischt 😉



  • danke für deine Hilfe, habe gestern rausgefunden das man einfach kleines sleep
    durch großes Sleep ersetzen braucht(erstmal drauf kommen :-)), des wegen habe ich erstmal nicht geantwortet.Ich hänge nämlich schon wieder an der nächsten aufgabe fest, wie realisiere ich das mit scanf: zuerst 2 mal eine eingabe tätigen und dann werden die beiden threads ausgegeben, bisjetzt habe ich es nur mit einer eingabe geschafft dann kommen aber gleich beide threads aufeinmal. habe irgendwie gelesen das scanf nicht richtig zwischen puffert und man einen flush() machen muß?
    boahr kein plan :-). gibts eine alternative? grüßle



  • Die oft im Netz beschriebene "Lösung" des scanf-Problems mit flush ist in der Regel nicht zuverlässig. Soweit ich das weiss, soll das nur bei einem Compiler richtig so funktionieren. Das Blöde beim Testen mit scanf - flush: hin und wieder funktioniert das scheinbar und dann bei wiederholten Testen auf einmal wieder nicht, wenn nicht der eine Compiler das Ganze gebaut hat.

    Sonst ist das hier eine der meisstgestellten Fragen, da sollte schon die eine oder andere Lösung hier im Forum beschrieben sein. Stichworte: gets, fgets, sscanf

    Achtung: auch bei den Alternativen sind compilerspezifische Lösungen unterwegs.


Log in to reply