Visualizzazione dei risultati da 1 a 10 su 10
  1. #1

    [C] Interrompre il flusso di un processo

    Mi stavo chiedendo: come fa un programma in C terminare l'esecuzione di un'altro programma?
    Nel senso: il kernel di un s.o. multitasking preemptive da un tot di tempo macchina ad un processo, poi lo blocca e ne mette un'altro in esecuzionene e così via.

    Per quanto riguarda me volevo sapere come realizzare un sistema del genere dentro un semplice programma, dove questo blocca l'esecuzione di una funzione per eseguirne un'altra e poi riprendere l'esecuzione della prima... qualcuno mi sa aiutare?
    printf("Programmazione in C!");
    cout<<"Programmazione in C++!";

  2. #2
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480

    Re: [C] Interrompre il flusso di un processo

    Originariamente inviato da metal_prog
    Mi stavo chiedendo: come fa un programma in C terminare l'esecuzione di un'altro programma?
    La terminazione di un programma viene fatta tramite opportune chiamate di sistema, dato che è il sistema che sta eseguendo il programma in questione ...

    Nel senso: il kernel di un s.o. multitasking preemptive da un tot di tempo macchina ad un processo, poi lo blocca e ne mette un'altro in esecuzionene e così via.
    Non ho capito il senso ...

    Per quanto riguarda me volevo sapere come realizzare un sistema del genere dentro un semplice programma, dove questo blocca l'esecuzione di una funzione per eseguirne un'altra e poi riprendere l'esecuzione della prima... qualcuno mi sa aiutare?
    Puoi usare i thread ... ma se sei un po' piu' preciso e dettagliato su quello che vuoi fare, probabilmente c'e' un'altra strada ...
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  3. #3
    Per curiosità volevo provare a fare un abbozzo di thread in user mode...
    printf("Programmazione in C!");
    cout<<"Programmazione in C++!";

  4. #4
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480
    Originariamente inviato da metal_prog
    Per curiosità volevo provare a fare un abbozzo di thread in user mode...
    Cosa sarebbe un thread in user mode?
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  5. #5
    dovresti precisare anche il s.o. che utilizzi in quanto le chiamate di sistema da utilizzare sono, naturalmente, differenti.
    ciao
    sergio

  6. #6
    I thread in user mode sarebbero quelli creati a livello di programma e non a livello di sistema operativo (kernel mode), io volevo provare a fare un surrogato di implementazione di thread, con uno scheduler molto semplice e un paio di thread...
    printf("Programmazione in C!");
    cout<<"Programmazione in C++!";

  7. #7
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480
    Originariamente inviato da metal_prog
    I thread in user mode sarebbero quelli creati a livello di programma e non a livello di sistema operativo (kernel mode), io volevo provare a fare un surrogato di implementazione di thread, con uno scheduler molto semplice e un paio di thread...
    Beh ... non e' affatto una cosa semplice ... comunque, per windows esistono i "fiber" ... puoi dare un'occhiata a questa implementazione ...

    http://www.flounder.com/fibers.htm
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  8. #8

    Re: [C] Interrompre il flusso di un processo

    Originariamente inviato da metal_prog
    Per quanto riguarda me volevo sapere come realizzare un sistema del genere dentro un semplice programma, dove questo blocca l'esecuzione di una funzione per eseguirne un'altra e poi riprendere l'esecuzione della prima... qualcuno mi sa aiutare?
    Puoi usare setjmp/longjmp:
    codice:
    #include <stdio.h>
    #include <stdlib.h>
    #include <setjmp.h>
    
    void f1(int state);
    void f2(int state);
    
    jmp_buf label;
    
    int main(void){
    
       int state = setjmp(label);
    
       if(state == 1)
          f1(state);
       else if(state == 2)
          f2(state);
       else if(state == 3)
          exit(0);
       
       f1(state);
       
       return 0;
    
    }
    
    void f1(int state){
       
       printf("Funzione 1\n");
       
       if(state == 0){
    
          printf("called first time\n");
          longjmp(label, 2);
    
       }
    
       printf("Funzione 1 esce\n");
       longjmp(label, 3);
    
    }
    
    void f2(int state){
       
       printf("Funzione 2\n");
       if(state == 2){
    
          printf("called first time\n");
          longjmp(label, 1);
    
       }
    
       /*Non viene mai eseguito, penso ...*/
       printf("Funzione 2 esce\n");
       longjmp(label, 3);
    
    }
    è un'esempio tirato a caso, per dare l'idea: non so neanche se funzioni

  9. #9
    Non ho ben capito il funzionamento di setjmp/longjmp... (il programma funziona comunque )
    printf("Programmazione in C!");
    cout<<"Programmazione in C++!";

  10. #10

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.