Visualizzazione dei risultati da 1 a 6 su 6
  1. #1
    Utente di HTML.it
    Registrato dal
    Jul 2017
    Messaggi
    11

    [C++] Eseguire una routine ad intervalli regolari

    Salve ragazzi, devo acquisire delle immagini attraverso una camera 3D. L'azienda produttrice ha fornito un software che permette l'acquisizione di una singola immagine ad ogni avvio del programma. Modificando il file c++ vorrei fare in modo che mi vengano acquisite piu immagini attraverso un unico lancio dell'applicazione. Per fare questo ho scritto un ciclo while attraverso il quale riesco a catturare tante immagini quante sono le iterazioni del ciclo while.

    Ora ho bisogno che queste immagini vengano acquisite ad intervalli regolari, ad esempio una ogni secondo per un minuto. Qualcuno ha qualche idea su come fare? Ho letto in giro su internet che posso usare la funzione clock oppure la funzione interval ma purtroppo non so come implementarla nel ciclo.

    Grazie mille

    codice:
    int main(int argc, char* argv[])
    
    { int i; 
       i=1;
    
    
        
      int exitCode = EXIT_FAILURE;
      const char* fileName = argc >  1 ? argv[1] : "points.pcd" ;
    
    
        CToFCamera camera;
        try
        {
    		
    	
    
    
            CToFCamera::InitProducer();
            camera.OpenFirstCamera();
    
    
            CEnumerationPtr ptrComponentSelector = camera.GetParameter("ComponentSelector");
            CBooleanPtr ptrComponentEnable = camera.GetParameter("ComponentEnable");
            CEnumerationPtr ptrPixelFormat = camera.GetParameter("PixelFormat");
    
    
            // Parameterize the camera to send 3D coordinates and intensity data
            ptrComponentSelector->FromString("Range");
            ptrComponentEnable->SetValue( true );
            ptrPixelFormat->FromString("Coord3D_ABC32f");
    
    
            ptrComponentSelector->FromString("Intensity");
            ptrComponentEnable->SetValue(true);
            ptrPixelFormat->FromString("Mono16");
    
    
    	while (i<60 )
    
           {
    
            // Acquire one single image
            BufferParts parts;
            GrabResultPtr ptrGrabResult = camera.GrabSingleImage( 1000, &parts );
    
            // Save 3D data
            if ( ptrGrabResult->status == GrabResult::Ok )
            {
    		std::ostringstream oss;
            oss << "points" << i << ".pcd";
                SavePointCloud( parts, fileName );
               rename("points.pcd", oss.str().c_str());
    
    			cout << fileName << endl;
    
    		}
            else
            {
                cerr << "Failed to grab an image." << endl;
            }
    
    		i++;
    
         }
    camera.Close();
            exitCode = EXIT_SUCCESS;
    	}
        catch ( GenICam::GenericException& e )
        {
            cerr << "Exception occurred: " << endl << e.GetDescription() << endl;
            // After successfully opening the camera, the IsConnected method can be used 
            // to check if the device is still connected.
            if ( camera.IsOpen() && ! camera.IsConnected() )
            {
                cerr << "Camera has been removed." << endl;
            }
    
    
        }
    
    
        if ( CToFCamera::IsProducerInitialized() )
            CToFCamera::TerminateProducer();  // Won't throw any exceptions
    
    
        cout << endl << "Press Enter to exit." << endl;
        while (cin.get() != '\n');
    
    
        return exitCode;
    
    }


  2. #2
    Utente di HTML.it L'avatar di shodan
    Registrato dal
    Jun 2001
    Messaggi
    2,381
    Puoi fare così:
    codice:
    #include <chrono> // per std::chrono_literals
    #include <thread> // per this_thread
    
    using namespace std::chrono_literals;
    ...
    
    while (condizione) {
        std::this_thread::sleep_for(1s); // da spostare dove fa più comodo
        ... etc..
    
    }
    This code and information is provided "as is" without warranty of any kind, either expressed
    or implied, including but not limited to the implied warranties of merchantability and/or
    fitness for a particular purpose.

  3. #3
    Utente di HTML.it
    Registrato dal
    Jul 2017
    Messaggi
    11
    grazie per la risposta

    purtroppo per visual basic 2010 non mi riconosce le libreirie chrono e thread

  4. #4
    Utente di HTML.it L'avatar di shodan
    Registrato dal
    Jun 2001
    Messaggi
    2,381
    Visual basic? O intendi Visual Studio 2010?
    This code and information is provided "as is" without warranty of any kind, either expressed
    or implied, including but not limited to the implied warranties of merchantability and/or
    fitness for a particular purpose.

  5. #5
    Utente di HTML.it
    Registrato dal
    Jul 2017
    Messaggi
    11
    visual studio 2010, avevo sbaglaito a scrivere

  6. #6
    Utente di HTML.it L'avatar di shodan
    Registrato dal
    Jun 2001
    Messaggi
    2,381
    Allora devi usare Sleep()
    https://msdn.microsoft.com/it-it/lib...(v=vs.85).aspx
    codice:
    #include <windows.h> // per Sleep
    
    
    while (condizione) {
        Sleep(DWORD(60000)); // Tempo in millisecondi da spostare dove fa più comodo
        ... etc..
    This code and information is provided "as is" without warranty of any kind, either expressed
    or implied, including but not limited to the implied warranties of merchantability and/or
    fitness for a particular purpose.

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.