Visualizzazione dei risultati da 1 a 4 su 4

Discussione: [c++] Ritardo

  1. #1
    Utente di HTML.it L'avatar di Orione
    Registrato dal
    Oct 2002
    Messaggi
    148

    [c++] Ritardo

    Ciao a tutti, ho qualche piccolo problema. Per prima cosa non ho mai messo giù più di 3 righe di codice in c++ quindi ne so ben poco per non dire nulla.

    Il mio problema consiste nel realizzare una funzione di ritardo (non il semplice sleep che ho già fatto) che mi permetta di essere inserita in una dll da utilizzare in un altro linguaggio di programmazione.

    La mia sequenza di funzioni si suddivide in questo modo:
    1- Ho una funzione che mi cancella il contenuto di una tabella
    2- Ho una funzione che mi riempie questa tabella in base a determinati criteri.
    3- Chiamo una funzione che mi crea un report.

    4- Ho una funzione che mi cancella il contenuto di una tabella
    5- Ho una funzione che mi riempie questa tabella in base a determinati criteri diversi dalla precedente.
    6- Chiamo una funzione che mi crea un report.

    Capita che il report al punto 3 sia vuoto perchè prima di crearmelo è già stata richiamata la funzione al punto 4.
    Quindi il mio intento sarebbe creare una funzione di ritardo che mi permetta di creare il report al punto 3 per poi passare al punto successivo.
    Come dicevo precedentemente la sola funzione sleep non va bene mi sa "però non ne sono sicuro" che dovrei creare una funzione con l'inserimento di un "thread" che abbia al suo interno uno sleep in modo da permettere di terminare la funzione di apertura del report e successivamente richiamare la funzione al punto 4.

    Vorrei sapere come scrivere questo pezzo di codice.
    Ho forse fatto un bel risotto ma spero di essermi spiegato.

    Ciao a tutti

  2. #2
    Utente di HTML.it L'avatar di Kreator
    Registrato dal
    May 2002
    Messaggi
    278
    Se ho be capito, quello che serve a te e' sincronizzare le due funzioni.
    Io lo risolverei in questa maniera, ti crei un "thread" parametrico che al costruttore gli inserisci dei parametri formali per i criteri di riempimento della tabella.
    Quando tu sei dentro il thread ti cancelli la tabella, te la riempi e vai ad eseguire il report .... l'unica cosa che ti devi ricordare di fare, è che devi sincronizzare il tuo thread con il thread principale del main per mezzo della funzione Synchronize in maniera tale che ti si blocchi per quell'istante desiderato l'esecuzione del main.
    In questa maniera solo il thread che ti sei creato e' in grado di accedere alla tabella contenuta nel Main Form.
    Spero di esserti stato di aiuto.

  3. #3
    Utente di HTML.it L'avatar di Orione
    Registrato dal
    Oct 2002
    Messaggi
    148
    In un certo senso si è quello che volevo fare ma il mio principale problema è iniziare visto che di c++ so poco e dovrei fare una dll da utilizzare nel mio linguaggio di programmazione.

    Se mi puoi scrivere una bozza di come cominciare poi potrei documentarmi su come fare il resto e lavorarci su.

    Nel frattempo grazie.

  4. #4
    Utente di HTML.it L'avatar di Kreator
    Registrato dal
    May 2002
    Messaggi
    278
    innanzitutto ti posso consigliare un link riguardante lo standard ANSI:

    C++ Library Reference

    per i thread bisogna che fai un paio di ricerche sul Google, io ho solo manuali scritti a casa.

    Cmq una possibile implementazione potrebbe essere questa:
    "La ho scritta qui sul momento"...

    codice:
    File Main.cpp
    
    void __fastcall TMain::CreaIstanze ()
    {
       ...
       tabella = new TStringGrid (this);  // inizializzazione della tabella
       ...
    }
    
    void __fastcall TMain::EseguiIlThread ()
    {
       ...
       thread = new TFunctionThread (false, tabella, criteri);
       ...
    }
    Poi avrai il tuo thread:

    codice:
    File TFunctionThreadFile.cpp
    
    void __fastcall TFunctionThread::Execute ()
    {
       Priority = tpIdle;
       Synchronize (MyOperation);
    }
    
    void __fastcall TFunctionThread::MyOperation ()
    {
       tabella->Clear ();
       InserisciValoriTabella (criteri);
       VisualizzaReport ();
    }
    
    void __fastcall TFunctionThread::InserisciValoriTabella (const char *tmp_criteri)
    {
       ...
    }
    
    void __fastcall TFunctionThread::VisualizzaReport ()
    {
       ...
    }
    Spero di esserti stato di aiuto.

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 © 2024 vBulletin Solutions, Inc. All rights reserved.