1. Este site usa cookies. Ao continuar a usar este site está a concordar com o nosso uso de cookies. Saber Mais.

Threads em C++

Discussão em 'Programação' iniciada por hasta.g5, 21 de Abril de 2005. (Respostas: 2; Visualizações: 1364)

  1. hasta.g5

    hasta.g5 I quit My Job for Folding

    Já procurei mas não encontro nada que explique uma simples thread em C++... Precisava de ter uma thread para comunicações com o porto de série, para poder esperar por dados sem parar o resto do programa (aplicação MFC).

    Alguém me pode dizer simplesmente como é que eu inicio uma thread de um método e defino os tempos de sleep da mesma? Anda complicado... :confused:
     
  2. Karmack

    Karmack Power Member

    Encontrei um artigo na MSDN Library chamado "Multithreading for Rookies". O artigo é de 1993! Tive a ler, na diagonal, umas linhas de código que está lá e reparei que para criar threads chama-se a função CreateThread().
    Se procurares em msdn.microsoft.com podes encontrar esse tal artigo.
     
  3. hasta.g5

    hasta.g5 I quit My Job for Folding

    Antes de mais, agradeço ao Dekker e ao Karmack pela ajuda. :)
    Aproveito e deixo aqui um programa simplicissimo que eu fiz que acho que ajuda a perceber as Threads... ou não... :P

    Código:
    #include <stdio.h>
    #include <windows.h>
    #include <iostream>
    using namespace std;
    
    void WINAPI ThreadUm(void);
    void WINAPI ThreadDois(void);
    int i=0;
    
    void main(void)
    {
    	unsigned long iID;
    	HANDLE hThreadUm, hThreadDois;
    	
    	hThreadUm = CreateThread(NULL,0,(LPTHREAD_START_ROUTINE)ThreadUm,NULL,0,&iID);
    	hThreadDois = CreateThread(NULL,0,(LPTHREAD_START_ROUTINE)ThreadDois,NULL,0,&iID);
    
    	while (i<=100)      //convem ser <= porque pode acontecer não fazer o teste quando estiver exactamente a 100
    	{
    			//espera
    	}
    
    	TerminateThread(hThreadUm,0);
    	TerminateThread(hThreadDois,0);
    
    	cout << "Fim. i=" << i << endl; //ao contrário do que se espera, nem sempre o i está a 100
    
    }   
    
    void WINAPI ThreadUm(void)
    {
    	while(true)
    	{
    		Sleep(200);	//adormece 200 milisegundos
    		cout << "Thread Um. i=" << i << endl;
    		i++;
    	}
    }
    
    void WINAPI ThreadDois(void)
    {
    	while(true)
    	{
    		Sleep(500); //adormece 500 milisegundos
    		cout << "Thread Dois. i=" << i << endl;
    		i++;
    	}
    }
    
    Só é pena estas threads não darem no que eu preciso. :( Pelos vistos threads de WINAPI não funcionam muito bem com ambiente gráfico (MFC App). Quando descobrir as outras vejo se faço um código simples para por aqui. :)

    Hasta.
     

Partilhar esta Página