Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 18
  1. #1
    Utente di HTML.it L'avatar di mamo139
    Registrato dal
    May 2005
    residenza
    Londra
    Messaggi
    841

    [c] CreateThread Function

    dunque ho provato ad usare la funzione CreateThread ma non risco a capire come inviare i parametri alla funzione che voglio eseguire e come prendere il suo output...
    c'è qualcuno che riescie a spiegarmi come fare??
    grazie

    codice:
    #include <stdio.h>
    #include <stdlib.h>
    #include <windows.h>
    
    int funzione(char *);
    
    int main(int argc, char *argv[])
    {
        char testo[] = "ciao!!\n";
        
        LPVOID param;
    	DWORD ThreadId;
    	CreateThread(NULL, 0, (LPTHREAD_START_ROUTINE) funzione, testo, 0, &ThreadId);
    	
        int x;
        for(x=0;x<100;x++)
            printf("main %d\n",x);
    
        
        getchar();
        return 1;
    }
    
    
    int funzione(char *testo){
        
        printf("%s\n", testo);
        
        int x;
        for(x=0;x<100;x++)
            printf("funzione %d\n",x);
        
        return x;
    }

  2. #2
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480
    E la domanda?
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  3. #3
    Utente di HTML.it L'avatar di mamo139
    Registrato dal
    May 2005
    residenza
    Londra
    Messaggi
    841
    Originariamente inviato da oregon
    E la domanda?
    sisi scusami... ho cliccato per sbaglio su invio

  4. #4
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480
    Beh ... i dati li hai passati (testo) ... cosa non va?

    In uscita, il thread restituisce un valore (tramite il return) che puoi leggere dal main.

    Dipende da quali valori vorresti ottenere in uscita ...
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  5. #5
    Utente di HTML.it L'avatar di mamo139
    Registrato dal
    May 2005
    residenza
    Londra
    Messaggi
    841
    Originariamente inviato da oregon
    Beh ... i dati li hai passati (testo) ... cosa non va?

    In uscita, il thread restituisce un valore (tramite il return) che puoi leggere dal main.

    Dipende da quali valori vorresti ottenere in uscita ...
    si sono riuscito a passare la variabile testo, ma ne vorrei passare piu di una e non so come fare...
    per quanto riguarda il return come lo leggo?

  6. #6
    Passa un puntatore ad una struttura in cui andrai a mettere tutti i parametri (compreso il valore restituito).
    Amaro C++, il gusto pieno dell'undefined behavior.

  7. #7
    Utente di HTML.it L'avatar di mamo139
    Registrato dal
    May 2005
    residenza
    Londra
    Messaggi
    841
    cavolo bella idea... non ci avevo pensato

    ora provo

  8. #8
    Utente di HTML.it L'avatar di mamo139
    Registrato dal
    May 2005
    residenza
    Londra
    Messaggi
    841
    ho provato così ma ovviamente non funziona!
    codice:
    #include <stdio.h>
    #include <stdlib.h>
    #include <windows.h>
    #include <string.h>
    
    int funzione(struct struttura);
    
    struct struttura { 
       int x;
       int y;
       char * testo;
       int ireturn;
    }; 
    
    int main(int argc, char *argv[])
    {
        struct struttura sfunzione;
        sfunzione.x = 10;
        sfunzione.y = 5; 
        sfunzione.testo = (char *) malloc(5 * sizeof(char));
        strcat(sfunzione.testo,"Ciao!");
    
        LPVOID param;
    	DWORD ThreadId;
    	CreateThread(NULL, 0, (LPTHREAD_START_ROUTINE) funzione, &sfunzione, 0, &ThreadId);
    	
        getchar();
        return 1;
    }
    
    
    int funzione(struct struttura sfunzione){
        
        printf("%s\n", sfunzione.testo);
        
        return 1;
    }

  9. #9
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480
    Ricorda che usi un puntatore alla struttura ...
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  10. #10
    codice:
    	CreateThread(NULL, 0, (LPTHREAD_START_ROUTINE) funzione, (LPVOID)&sfunzione, 0, &ThreadId);
    codice:
    int funzione(LPVOID param){
        struct struttura sfunzione=(struct struttura *)param;
        printf("%s\n", sfunzione->testo);
        
        return 1;
    }
    Amaro C++, il gusto pieno dell'undefined behavior.

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.