Visualizzazione dei risultati da 1 a 9 su 9
  1. #1
    Utente di HTML.it
    Registrato dal
    Jul 2008
    Messaggi
    62

    [C] Problema Multithreading

    Ciao a tutti,
    sto sviluppando una piccola applicazione in C, avendo bisogno di una riga di comando ho deciso di implementare un nuovo thread che esegua questo compito, documentandomi su MSDN ho trovato la funzione _beginthread che utilizzo in questo modo :

    _beginthread( user_interface,0,NULL );

    la mia funzione che gestisce la console si chiama ovviamente user_interface.

    Il programma funziona benissimo, per interagire con il programma principale ho deciso di utilizzare una variabile esterna da 16 bit (unsigned short) con vari Flags, anche questo sistema funziona correttamente.

    Il problema arriva alla chiusura del programma : quando main finisce il suo lavoro setta prima un flag nella variabile esterna poi esce con un return, la funzione user_interface e' invece racchiusa in un while, ed esegue il suo lavoro solo se quel flag e' 0... infatti appena main finisce il suo lavoro e setta ad 1 quel flag anche la user_interface esce dal while e va a cadere nell' istruzione _endthread(); ... il problema e' che il programma resta aperto con il cursore lampeggiante in console , mi sfugge qualcosa ?


    void user_interface() {
    extern int command_flags;
    while( command_flags & 1 == 0 ){

    ... cutted code ...

    }
    _endthread();
    }




    Grazie delle eventuali risposte

  2. #2
    Credo che il main debba attendere che i thread siano terminati; usa la WaitForSingleObject a questo scopo.
    Amaro C++, il gusto pieno dell'undefined behavior.

  3. #3
    Utente di HTML.it
    Registrato dal
    Jul 2008
    Messaggi
    62
    Ciao,

    ho trovato il problema :rollo:

    nella funzione user_interface utilizzo un gets(); che mi fa piantare il programma, e fino a che non gli do' una stringa in input non esce dal programma.

    C'e un modo per forzare l' interruzione del thread o dell' intero processo da main ?


    Grazie.

  4. #4

  5. #5
    Utente di HTML.it
    Registrato dal
    Jul 2008
    Messaggi
    62
    Originariamente inviato da MacApp
    ti consiglio di usare la _beginthreadex

    vedi
    http://msdn.microsoft.com/en-us/libr...cb(VS.80).aspx
    Grazie del consiglio, ma non riesco comunque a forzare l' interruzione del thread user_interface da main

  6. #6
    Puoi usare la API TerminateThread, ma non è un metodo molto ortodosso...
    Amaro C++, il gusto pieno dell'undefined behavior.

  7. #7
    Utente di HTML.it
    Registrato dal
    Jul 2008
    Messaggi
    62
    Originariamente inviato da MItaly
    Puoi usare la API TerminateThread, ma non è un metodo molto ortodosso...

    ---- EDIT ----

    Penso di aver risolto, ho provato ma non funzionava, forse perche' anziche' dargli l' HANDLE alla funzione stavo dando il nome del thread


    & grazie .

  8. #8
    Alla prossima!
    Amaro C++, il gusto pieno dell'undefined behavior.

  9. #9
    Utente di HTML.it
    Registrato dal
    Jul 2008
    Messaggi
    62
    Ciao,

    purtorppo ho parlato troppo presto

    ora il thread viene interrotto, infatti se premo qualcosa non viene visualizzato nulla in console e anche premendo invio non si chiude, se provo a fare ctrl+c il processo si chiude e tutta la roba che ho scirtto prima mi viene "spalmata" nella riga di comando di windows, penso che questo sia un problema inerente allo stato in cui mi lascia gets(); quando forzo la chiusura, quindi non so se sia risolvibile


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.