Avatar billede marn133 Nybegynder
18. juni 2006 - 17:52 Der er 7 kommentarer og
2 løsninger

hjælp til C threads på linux

hey..

jeg er forholdsvis ny i C programmering, og jeg har kastet mig ud i et projekt hvor thraeds er en nødvendighed....

Programmet jeg vil lave skal køre på linux, og bliver lavet med GTK som GUI..

programmets formål er virke som en tar.gz installer til linux, det er "rimeligt" nemt men problemet er nu som følger:

når jeg vil køre en kommando fryser hele mit GUI imens processen er igang, dette overraskede mig ikke og jeg prøvede derfor at lave processen om til en thread men lige meget hvordan jeg laver denne thread kan jeg ikke få GUI til at stoppe med at "fryse".. :S

jeg har grundlæggende opbygget mine threads på en måde der ligner følgende


void *test();


void on_button1_clicked{ 
    pthread_t thread1;
    pthread_create( &thread1, NULL, test, NULL);
    pthread_join( thread1, NULL);   
}

void *test(){
system(""tar xvzf FIL.tar.gz);
}



er der nogle der kan se hvad jeg gør forkert ??

håber i kan hjælpe

/Martin
Avatar billede arne_v Ekspert
18. juni 2006 - 19:04 #1
pthread_join venter på at tråden afslutter og så er du lige vidt ....
Avatar billede marn133 Nybegynder
19. juni 2006 - 19:43 #2
Mange tak arne_v det hjalp en hel del...

Men stadig ikke nok mit GUI fryser stadig ofte...

jeg tester med denne kode:

///////////////////////////////////////////////////////////////
void *test();

pthread_t thread1;


void on_button1_clicked    (GtkButton      *button,  gpointer        user_data){ 
pthread_create( &thread1, NULL, test, NULL);
}

void *test(){
test:
    gtk_progress_bar_pulse(PROGRESS);
    sleep(5);
    goto test;
}
///////////////////////////////////////////////////////////////

min progressbar "pulser" en eller måske to gagne hvor efter hele mit GUI fryser til :S

/Martin
Avatar billede smirnoff Nybegynder
19. juni 2006 - 22:38 #3
hvad hvis du laver :

void *test(){
    while(true) {
        gtk_progress_bar_pulse(PROGRESS);
        sleep(5);
        /* og så et check på om den er færdig og hop ud */
    }
}
Avatar billede smirnoff Nybegynder
19. juni 2006 - 23:10 #4
- havde overset den pulser 1 eller 2 gange .. har du prøvet at blot skrive ud til konsollen i den *test() i et loop på 10-20 gange ... fryser det så ??
Avatar billede arne_v Ekspert
20. juni 2006 - 01:11 #5
er GTK thread safe ?
Avatar billede smirnoff Nybegynder
20. juni 2006 - 14:02 #6
evt. tag et kig på http://www.gtk.org/faq/ .. punkt 5.2
Avatar billede marn133 Nybegynder
21. juni 2006 - 00:13 #7
Når jeg laver en thread der ikke benytter sig af GTK virker det fint...

Dvs: at jeg ikke har fået lavet GTK thread safe...

Syntes det virker lidt uoverskueligt, at lave GTK thread safe :S

og jeg får ikke tid til at rode med det de næste par dage og da spørgsmålet gik på threads vil jeg gerne lukke ned her og acceptere svar fra jer begge.

så er det muligt at jeg åbner et nyt spørgsmål om et par dage ang. at lave GTK thread safe.... :D

Mange tak for hjælpen...!

/Martin Nielsen.
Avatar billede arne_v Ekspert
21. juni 2006 - 01:15 #8
så må vi jo hellere få lagt nogle svar
Avatar billede smirnoff Nybegynder
21. juni 2006 - 08:07 #9
.. yess
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester