Προβλημα με νηματα

Συζητήσεις για την γλώσσα C και C++

Συντονιστές: WebDev Moderators, Super-Moderators

Απάντηση
billakoss
Δημοσιεύσεις: 17
Εγγραφή: 07 Οκτ 2010 22:37
Τοποθεσία: greece

Προβλημα με νηματα

Δημοσίευση από billakoss » 11 Νοέμ 2010 14:59

Καλησπερα ,ε χω ενα προγραμα που να διαβαζει γραματα απο το χρηστη και το πρωτο νημα θα τυπωνει τα γραματα και το δευτερο τον αριθμο. εκανα το παρακατω αλλα δεν παιζει , αν βγαλω τα νηματα και το κανω σερι παιζει κανονικα , δεν ξερω τι κανω λαθος με τα νηματα..

#include <stdio.h>
#include <stdlib.h>
#include <pthread.h>


void Printchar(void* nothing){
int count[100];
printf("%s",string);
}

void metrima(void* nothing){
int count;
count=strlen(string);
printf("ta grammata einai: %d \n",count);
}


int main(){

int count;
int i;
char string[100];
pthread_t tid;
pthread_t tid1;

printf("Grapse grammata: \n");
scanf("%s",string);

pthread_create(&tid,NULL,(void *)&Printchar,NULL);
pthread_create(&tid1,NULL,(void *)&metrima,NULL);


}



ΠΟυ εχω πακριβως προβλημα γιατι οσο κι αν εψαξα δεν βρηκα κατι.
compile to κανω με gcc -o ask4 ask4.c -lpthread
Ευχαριστω

Άβαταρ μέλους
cherouvim
Script Master
Δημοσιεύσεις: 3137
Εγγραφή: 13 Ιούλ 2005 22:56
Τοποθεσία: Athens, Greece
Επικοινωνία:

Προβλημα με νηματα

Δημοσίευση από cherouvim » 11 Νοέμ 2010 16:12

billakoss έγραψε: δεν ξερω τι κανω λαθος με τα νηματα..
Το πρώτο λάθος είναι που τα λες νήματα αντί για threads. :D

billakoss
Δημοσιεύσεις: 17
Εγγραφή: 07 Οκτ 2010 22:37
Τοποθεσία: greece

Προβλημα με νηματα

Δημοσίευση από billakoss » 11 Νοέμ 2010 16:27

Σωστα :(


billakoss
Δημοσιεύσεις: 17
Εγγραφή: 07 Οκτ 2010 22:37
Τοποθεσία: greece

Προβλημα με νηματα

Δημοσίευση από billakoss » 11 Νοέμ 2010 20:48

Μπορειτε να μου πειτε τοτε που ειναι το λαθος γιατι εγω δεν βλεπω καποιο λαθος με βαση τα λινκς που μου δωσατε
Ο κωδικας χυμα τρεχει οπως ειπα , compile Κανει σωστα πηγαινει η create αρα λαθος που εχω?

gvre
Δημοσιεύσεις: 990
Εγγραφή: 14 Οκτ 2010 11:34
Τοποθεσία: Ηράκλειο Κρήτης
Επικοινωνία:

Προβλημα με νηματα

Δημοσίευση από gvre » 11 Νοέμ 2010 21:07

Ο κώδικας που έστειλες δεν κάνει compile. Στον υπολογιστή μου εμφανίζει

Κώδικας: Επιλογή όλων

gcc -o ask4 ask4.c -lpthread 
ask4.c&#58; In function ‘Printchar’&#58;
ask4.c&#58;8&#58; error&#58; ‘string’ undeclared &#40;first use in this function&#41;
ask4.c&#58;8&#58; error&#58; &#40;Each undeclared identifier is reported only once
ask4.c&#58;8&#58; error&#58; for each function it appears in.&#41;
ask4.c&#58; In function ‘metrima’&#58;
ask4.c&#58;13&#58; warning&#58; incompatible implicit declaration of built-in function ‘strlen’
ask4.c&#58;13&#58; error&#58; ‘string’ undeclared &#40;first use in this function&#41;
Διάβασε τα tutorials (μαζί με τα σχόλια) στα links που έστειλα. Μόλις τα διαβάσεις και διορθώσεις τον κώδικά σου ξαναστείλε τον για να δούμε αν χρειάζονται και άλλες αλλαγές.
πχ. Το string η printf από που το διαβάζει;

Κώδικας: Επιλογή όλων

void Printchar&#40;void* nothing&#41;&#123;
    int count&#91;100&#93;;
    printf&#40;"%s",string&#41;;
&#125;

billakoss
Δημοσιεύσεις: 17
Εγγραφή: 07 Οκτ 2010 22:37
Τοποθεσία: greece

Προβλημα με νηματα

Δημοσίευση από billakoss » 11 Νοέμ 2010 22:00

τον άλλαξα τον κώδικα , δεν ξέρω γιατί δεν εμφάνιζε τίποτα πριν , τώρα εμφανίζει αλλα δεν μου παίρνει p.x το string που περιέχει το κείμενο που έβαλα δεν το πηγαίνει και στο νήμα ούτε και το count αφού το string το διαβάζει σαν 0


#include <stdio.h>
#include <stdlib.h>
#include <pthread.h>



void Printchar(void *);
void metrima(void *);



int main(){

int count;
int i;
char string[100];
pthread_t tid;
pthread_t tid1;

printf("Grapse grammata: \n");
scanf("%s",string);

pthread_create(&tid,NULL,(void *)&Printchar,NULL);
pthread_create(&tid1,NULL,(void *)&metrima,NULL);
pthread_join(tid,NULL);
pthread_join(tid1,NULL);
return 0;

}
void Printchar(void *str){
char string[100];
printf("auta poy priktologises einai: %s\n",string);

}

void metrima(void *str){
char string[100];
int count;
count=strlen(string);
printf("ta grammata einai: %d \n",count);
}




θα το ψάξω και άλλο αλλα δεν βρήκα τρόπο να παραμένει αυτό που έχει η μεταβλητή και στα νήματα

billakoss
Δημοσιεύσεις: 17
Εγγραφή: 07 Οκτ 2010 22:37
Τοποθεσία: greece

Προβλημα με νηματα

Δημοσίευση από billakoss » 11 Νοέμ 2010 22:32

ok το βρήκα , άλλαξα το void *str με το string και το count αντίστοιχα..
Eyxarsto

gvre
Δημοσιεύσεις: 990
Εγγραφή: 14 Οκτ 2010 11:34
Τοποθεσία: Ηράκλειο Κρήτης
Επικοινωνία:

Προβλημα με νηματα

Δημοσίευση από gvre » 12 Νοέμ 2010 09:20

Αν θέλεις, πόσταρε το διορθωμένο κώδικα για να δούμε αν χρειάζεται περαιτέρω συζήτηση.

billakoss
Δημοσιεύσεις: 17
Εγγραφή: 07 Οκτ 2010 22:37
Τοποθεσία: greece

Προβλημα με νηματα

Δημοσίευση από billakoss » 12 Νοέμ 2010 17:31

#include <stdio.h>
#include <stdlib.h>
#include <pthread.h>



void Printchar(void *);

void metrima(void *);


int main(){

int count;
int i;
char string[100];
pthread_t tid;
pthread_t tid1;

printf("Grapse grammata: \n");


scanf("%s",string);

pthread_create(&tid,NULL,(void *)&Printchar,string);
pthread_create(&tid1,NULL,(void *)&metrima,string);

pthread_join(tid,NULL);
pthread_join(tid1,NULL);

return 0;

}
void Printchar(void *string){
int count;
printf("auta poy priktologises einai: %s\n",string);
count=strlen(string);

}

void metrima(void *string){
int count;
count=strlen(string);
printf("ta grammata einai: %d \n",count);

}

gvre
Δημοσιεύσεις: 990
Εγγραφή: 14 Οκτ 2010 11:34
Τοποθεσία: Ηράκλειο Κρήτης
Επικοινωνία:

Προβλημα με νηματα

Δημοσίευση από gvre » 12 Νοέμ 2010 18:09

gcc ask4.c -o ask4 -lpthread -Wall
ask4.c: In function ‘main’:
ask4.c:15: warning: unused variable ‘i’
ask4.c:14: warning: unused variable ‘count’
ask4.c: In function ‘Printchar’:
ask4.c:36: warning: format ‘%s’ expects type ‘char *’, but argument 2 has type ‘void *’
ask4.c:37: warning: implicit declaration of function ‘strlen’
ask4.c:37: warning: incompatible implicit declaration of built-in function ‘strlen’
ask4.c: In function ‘metrima’:
ask4.c:43: warning: incompatible implicit declaration of built-in function ‘strlen’


Η strlen περιμένει char * ενώ αυτό που του περνάς εσύ είναι void *. Γενικά θα πρέπει να κάνεις cast το void * στον αρχικό τύπο δεδομένων. Στα παραδείγματα των παραπάνω links δείχνει πως γίνεται.
ps. Κάνε include και το <string.h>.

billakoss
Δημοσιεύσεις: 17
Εγγραφή: 07 Οκτ 2010 22:37
Τοποθεσία: greece

Προβλημα με νηματα

Δημοσίευση από billakoss » 12 Νοέμ 2010 18:26

μονο ένα warning έμεινε αυτό που μου είπες. το κοίταξα αλλα άλλαξα το void σε char αλλα δεν έγινε τίποτα , μήπως καλύτερα να το κάνω atoi?είχα μια πρόοδο πάντως δεν μπορείς να πεις...


#include <stdio.h>
#include <stdlib.h>
#include <pthread.h>
#include <string.h>


void Printchar(void *);

void metrima(char *);


int main(){

int count;
int i;
char string[100];
pthread_t tid;
pthread_t tid1;

printf("Grapse grammata: \n");


scanf("%s",string);

pthread_create(&tid,NULL,(void *)&Printchar,string);
pthread_create(&tid1,NULL,(void *)&metrima,string);

pthread_join(tid,NULL);
pthread_join(tid1,NULL);

return 0;

}
void Printchar(void *string){
int count;
printf("auta poy priktologises einai: %s\n",string);
count=strlen(string);

}

void metrima(char *string){
int count;
count=strlen(string);
printf("ta grammata einai: %d \n",count);

}

gvre
Δημοσιεύσεις: 990
Εγγραφή: 14 Οκτ 2010 11:34
Τοποθεσία: Ηράκλειο Κρήτης
Επικοινωνία:

Προβλημα με νηματα

Δημοσίευση από gvre » 12 Νοέμ 2010 18:31

Κώδικας: Επιλογή όλων

void metrima&#40;void *&#41;;

void Printchar&#40;void *string&#41;
&#123;
        printf&#40;"auta poy priktologises einai&#58; %s\n", &#40;char *&#41;string&#41;;
&#125;

void metrima&#40;void *string&#41;
&#123;
        size_t count = strlen&#40;&#40;char *&#41;string&#41;;
        printf&#40;"ta grammata einai&#58; %d \n", count&#41;;
&#125;
ps. Σβήσε το i και count από τη main.

billakoss
Δημοσιεύσεις: 17
Εγγραφή: 07 Οκτ 2010 22:37
Τοποθεσία: greece

Προβλημα με νηματα

Δημοσίευση από billakoss » 12 Νοέμ 2010 18:38

κομπλέ , ούτε ένα warning
ευχάριστο και πάλι

gvre
Δημοσιεύσεις: 990
Εγγραφή: 14 Οκτ 2010 11:34
Τοποθεσία: Ηράκλειο Κρήτης
Επικοινωνία:

Προβλημα με νηματα

Δημοσίευση από gvre » 12 Νοέμ 2010 18:51

Ακόμα καλύτερα

Κώδικας: Επιλογή όλων

void *Printchar&#40;void *&#41;;
void *metrima&#40;void *&#41;;

void *Printchar&#40;void *string&#41;
&#123;
        printf&#40;"auta poy priktologises einai&#58; %s\n", &#40;char *&#41;string&#41;;
&#125;

void *metrima&#40;void *string&#41;
&#123;
        size_t count = strlen&#40;&#40;char *&#41;string&#41;;
        printf&#40;"ta grammata einai&#58; %d \n", count&#41;;
&#125;

pthread_create&#40;&tid, NULL, Printchar,string&#41;;
pthread_create&#40;&tid1,NULL, metrima,  string&#41;;
Δες στο http://www.yolinux.com/TUTORIALS/LinuxT ... reads.html το [C++ pitfalls]

Απάντηση

Επιστροφή στο “C, C++”

Μέλη σε σύνδεση

Μέλη σε αυτήν τη Δ. Συζήτηση: Δεν υπάρχουν εγγεγραμμένα μέλη και 0 επισκέπτες