Visualizzazione dei risultati da 1 a 4 su 4
  1. #1
    Utente di HTML.it
    Registrato dal
    Aug 2002
    Messaggi
    281

    [C++ .NET] Reindirizzare lo standard output di un processo in modo asincrono

    Pochi giorni fa ho creato un programmino (in C) in console che converte una sequenza di immagini da un formato ad un altro
    praticamente prende in pasto il primo file e converte tutti i file che fanno parte della sequenza (il primo file ha nome *0000.xxx, il secondo *0001.xxx e così via), e ogni volta che ne converte uno sullo standard output scrive "Conversione del file <nomefile> avvenuta"

    Ora ho creato un interfaccia grafica che richiama questo programmino e sono riuscito a trasferire lo standard output del convertire su questo, in modo che la scritta "Conversione del file <nomefile> avvenuta" la vedo all'interno della Form.
    Solo che così facendo ho notato che la form tende ad avere dei tempi di risposta un pò lunghi (diciamo che la scritta viene aggiornata ogni 15 immagini), cosa un pò fastidiosa. Questo forse può essere dovuto al fatto che il reindirizzamento dello standard output l ho fatto in modo sincrono

    Qualcuno sa come farlo in modo asincrono?
    Ho letto questo esempio --> http://msdn2.microsoft.com/it-it/lib...outputreadline(VS.80).aspx

    Ma sinceramente nn ci ho capito molto, tra l'altro poi sembra molto diverso da quello che devo fare io

  2. #2
    Utente di HTML.it
    Registrato dal
    Aug 2002
    Messaggi
    281
    Sono riuscito a utilizzare il modo asincrono, ed effettivamente l'esecuzione sembra più veloce... ma il problema rimane, anzi ora si nota addirittura di più
    Praticamente il programma sembra che passa dall immagine 0 alla 47, poi alla 94 e così via di questo passo
    Il fatto è che le stringhe in realtà vengono visualizzate tutte, ma ogni tot (in questo caso 47), la reindirizzazione dell'output sembra bloccarsi per poi riprendere tutta d'un colpo e poi rifermarsi di nuovo (questi stop durano diversi secondi e il salto di 47 avviene in una frazione brevissima, quasi impercettibile all'occhio)

    Cosa può essere?

    ps: ogni volta che modifico la stringa visualizzata sulla form applico una Application:: DoEvents(), in modo da non far sembrare il programma bloccato... è giusto o esiste un metodo migliore?

  3. #3
    Utente di HTML.it
    Registrato dal
    Aug 2002
    Messaggi
    281
    Ora sono riuscito a farlo funzionare correttamente... ma non mi spiego una cosa

    Prima nella cout mettevo:
    cout << "Creata immagine " << path << '\n' (o "\n");

    e nel programma principale mi si verifica quel problema dello scatto di 47

    sostituendo il '\n' con un endl invece va tutto perfettamente

    Ma \n e endl non sono la stessa cosa?

    Se sì come mai c'è questa differenza di comportamento quando reindirizzo lo standard output di questo programma in quello in .net (usando la classe process)?

  4. #4
    Utente di HTML.it
    Registrato dal
    Aug 2002
    Messaggi
    281
    Mi rispondo da solo

    la cout oltre a mandare a capo (carattere \n) richiama anche la fflush


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.