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

    Multithreading - Gestione Threads Visual C++

    Ciao,
    ho un problema con un progetto che sto facendo in Visual C++ (Visual Studio 2008/2010).
    Ho dovuto, per necessità, far uso della classe Thread per creare un thread che mi eseguisse una determinata funzione separatemente dal thread principale.
    Mi è servito crearlo poichè nella funzione è presente un ciclo infinito che altrimenti mi avrebbe bloccato l'intero programma.
    Più precisamente ho creato una picturebox all'interno della quale tramite il suddetto ciclo visualizzo un video.
    Il problema che mi si è presentato consiste nel fatto che quando porto il form contenente la picture box "al di fuori dallo schermo" oppure nel caso aprissi un'altro form (appartenente anch'esso al progetto) capita che nel momento in cui riporto il form all'interno dello schermo o chiudo un form precedentemente aperto venga lanciata l'eccezione "System.AccessViolationException: Attempted to read or write protected memory. This is often an indication that other memory has been corrupted."
    Potrebbe esser causato dal fatto che sia il thread principale che il secondo thread creato da me usino la picturebox contemporaneamente?
    Se sì come posso gestire la cosa? Ho visto che esiste la classe CSemaphore, potete darmi un suggerimento su come usarla nel caso volessi bloccare gli accessi contemporanei alla picturebox da parte dei due thread ?

    Grazie

  2. #2
    Esattamente l'eccezione è la seguente : " 'System.AccessViolationException' in System.Drawing.dll "

  3. #3
    Data una picturebox, creata in un thread, qualcuno sa come fare per riuscire a modificare la proprietà Image di una picturebox da un altro thread?
    Cercando in rete, se non ho capito male, bisognerebbe controllare attraverso InvokeRequired se il thread chiamante è lo stesso del thread in cui è stato creato l'oggetto e in seguito fare un Invoke di un metodo delegato!
    Sapete dirmi se è la procedura giusta e se sì, in che modo posso costruire il metodo delegato?

  4. #4
    Nessuno che può aiutarmi?
    Io nel frattempo ho continuato a studiarmi la situazione ed ho risolto in parte...
    Facendo nel seguente modo funziona senza problemi!
    codice:
    private:delegate void MyDelegate(); //Definisco Delegato
    
    	 void video(IplImage *view)
                   {
    		  if (videobox->InvokeRequired)
                            {
    			 videobox->BeginInvoke(gcnew MyDelegate(this,&Form1::InvokeMethod) );
    		        }
    		  else
                          {
    			 this->videobox->Visible=false;
    
    		      }
    	 	 }
    //Metodo invocato per la modifica del controllo in questione
    	 void InvokeMethod()
    	 {
    		 this->videobox->Visible=false;
    	 }
    Il problema è che ho bisogno di passare al metodo InvokeMethod() il parametro view di tipo IplImage * e non so come fare anche perchè se non ho capito male accetta solo parametri di tipo Object^
    Vi incollo qui sotto il codice bozza per far capire meglio cosa devo fare :

    codice:
    private:delegate void MyDelegate(IplImage *view );
    void video(IplImage *view){
    		 
    		 if(videobox->InvokeRequired){
    			 videobox->BeginInvoke(gcnew MyDelegate(this,&Form1::InvokeMethod),view); //non posso passare view(non è un Object^)
    		 }
    		 else{
    			 this->videobox->Image=view;
    
    		 }
    	 
    	 }
    
    	 void InvokeMethod(IplImage *view )
    	 {
    
    		 videobox->Image=view;
    	 }
    (videobox->Image=view; questa ve l'ho scritta così solo per farvi capire che a me serve il parametro view per poter modificare la proprietà Image, in realtà non mi basta una semplice assegnazione ma qui è irrilevante )
    Questa è stata la mia prova ma ovviamente non va poichè il BeginInvoke accetta come secondo parametro un array di Object ^ e non so proprio come fare per passare view come parametro al metodo InvokeMethod.
    Qualche consiglio?

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.