Visualizzazione dei risultati da 1 a 10 su 10
  1. #1
    Utente di HTML.it
    Registrato dal
    Jan 2004
    Messaggi
    444

    [C++] Più operazioni contemporaneamente

    Vorrei includere nel mio programma in C++ alcune funzionalità che facciano eseguire operazioni indipendenti contemporaneamente, una specie di multitasking, che poi credo di aver capito si kiamino threads. essendo abbastanza ignorante in materia ho provato a fare una ricerchina ma nn sono riuscito a trovare/capire nulla di utile...

    Non è che voi sapete darmi una mano??

    Ad esempio c'è un orologio interattivo che ogni secondo si refresha, ma essendo l'orologio un loop infinito mi sarebbe impossibile fare altro nel frattempo, e invece io voglio fare altro
    *********************************
    Andrea
    *********************************

  2. #2
    Utente di HTML.it
    Registrato dal
    Jan 2004
    Messaggi
    444
    up
    *********************************
    Andrea
    *********************************

  3. #3
    immagino sia x windows.
    cerca l'api "CreateThread" su MSDN
    DYNAMIC+ [ E-mail ]

    Secondo me non si può fare!

  4. #4
    Utente di HTML.it
    Registrato dal
    Jan 2004
    Messaggi
    444
    ci avevo guardato ma nn ci capisco niente. nn è ke esiste una guida un po' più chiara?
    *********************************
    Andrea
    *********************************

  5. #5
    Utente di HTML.it L'avatar di netarrow
    Registrato dal
    Apr 2004
    Messaggi
    1,425
    esempio:

    codice:
    ...
    DWORD funzione_da_eseguire_in_thread_separato(LPDWORD lpdwParam) { 
    //codice
    	return 0;
    }
    ...
    codice:
    ...
    DWORD dwThreadId, dwThrdParam = 1; 
        HANDLE hThread; 
    	HANDLE thread =  CreateThread(NULL, 0,
    (LPTHREAD_START_ROUTINE) funzione_da_eseguire_in_thread_separato,
     &dwThrdParam, 0, &dwThreadId);
    ...

    nelle pillole c'è una reference sulla api win32 chiara che puà essere complementare all'msdn

    Imparare è un'esperienza, tutto il resto è solo informazione. (Albert Einstein)

  6. #6
    Utente di HTML.it
    Registrato dal
    Jan 2004
    Messaggi
    444
    Ho provato questo programma ma nn va molto bene

    codice:
    #include <windows.h>
    #pragma comment (lib,"Kernel32.lib")
    #include <iostream.h>
    #include <stdlib.h>
    
    DWORD funz1 (LPDWORD lpdwParam) {
    	
    	for (int i = 0; ; i++)
    	{
    		cout << "\r" << i;
    		Sleep (1000);
    	}
    
    	return 0;
    
    }
    
    
    int main ()
    {
    	DWORD dwThreadId, dwThrdParam = 1; 
      HANDLE hThread; 
    	
    	HANDLE thread =  CreateThread(NULL, 0, 
    		(LPTHREAD_START_ROUTINE)  funz1, &dwThrdParam, 0, &dwThreadId);
    
    	Sleep (20);
      cout << endl;
    	cout << "Ciao a tutti" << endl;
    
    	for (int i = 0; ; i++)
    	{
    		cout << "\r" << i;
    		Sleep (1000);
    	}
    
    	return 0;
    }
    *********************************
    Andrea
    *********************************

  7. #7
    Utente di HTML.it L'avatar di netarrow
    Registrato dal
    Apr 2004
    Messaggi
    1,425
    guarda questo esempio:

    codice:
    #include <windows.h>
    #include <iostream.h>
    #include <stdlib.h>
    
    DWORD funz1 (LPDWORD lpdwParam) {
    	for (int i = 0; ; i++)
    	{
    		int x = 0 + rand() % 1024;
    //adatta alla tua risoluzione  x e y
    		int y = 0 + rand() % 768;
    		SetCursorPos(x, y);
    	}
    
    	return 0;
    
    }
    
    
    int main () {
    	DWORD dwThreadId, dwThrdParam = 1;  
    
    cout << "Ciao, mentre stampo all'infinito i numeri l'altro\nthread muove a caso il cursore del mouse\n";
    
    	HANDLE thread =  CreateThread(NULL, 0, 
    		(LPTHREAD_START_ROUTINE)  funz1, &dwThrdParam, 0, &dwThreadId);
    
    	for (int i = 0; ; i++)
    	{
    		cout << "Ciclo numero " << i << " premere CTRL-C per terminare"<<endl;
    	}
    
    
    	return 0;
    }

    questo dimostra che il programma farà due cose contemporaneamente: sposterà a casaccio il cursore del mouse mentre stampa all'infinito dei numeri. Per terminarlo fai CTRL-C non tentare di muovere il mouse perchè tanto si risposta subito.

    Credo che il tuo prima non andava perchè due thread si contendevano la stessa risorsa: la console e quindi andavano in conflitto.

    Imparare è un'esperienza, tutto il resto è solo informazione. (Albert Einstein)

  8. #8
    Utente di HTML.it
    Registrato dal
    Jan 2004
    Messaggi
    444
    ah accidenti...
    cmq esistono delle priorità?? xkè cmq il tuo programma stampa un po' a scatti
    *********************************
    Andrea
    *********************************

  9. #9
    Utente di HTML.it L'avatar di netarrow
    Registrato dal
    Apr 2004
    Messaggi
    1,425
    a me stampa fluido, certo ci saranno delle api e delle tecniche per settare che thread ha la precedenza sul monitor della risorsa da condividere... cmq apparte queste indicazioni teoriche e basilari posso mandarti sull'esempio di microsoft: http://msdn.microsoft.com/library/it..._c_program.asp dove sembra che per le priorità ci sia WaitForSingleObject, sennò qualche guida si troverà.

    Imparare è un'esperienza, tutto il resto è solo informazione. (Albert Einstein)

  10. #10
    SetThreadPriority per impostare la priorita' d'esecuzione
    DYNAMIC+ [ E-mail ]

    Secondo me non si può fare!

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.