Thread Class - C++

Started by Dark_Side, 22 de April , 2007, 11:11:55 PM

Previous topic - Next topic

0 Members and 1 Guest are viewing this topic.

Dark_Side

Hi xD

Lol, aos poucos vou retomando a prática. Dessa vez, é um classe para trabalhar com threads (Windows).
Apesar de ser simples, engloba as principais funções utilizadas para  a manipulação de threads neste ambiente.

Funções:

QuoteThread::Criar() -> Cria uma nova thread;

Thread::Pausar() -> Pausa a execução de uma thread;

Thread::Resumir() -> Retoma a execução de uma thread pausada;

Thread::Terminar() -> Finaliza uma thread;

Thread::Esperar(DWORD tempo) -> Aguarda a execução de uma thread num determinando tempo (em milisegundos);

BOOL Thread::Pausada -> se TRUE a thread inicializa-se pausada, do contrário, é executada após ser criada;

LPCVOID Thread::Parametro -> parametro opcional a ser passado à função da thread;

Código da classe:



#ifndef _WINDOWS_H
#include <windows.h>
#endif

typedef LPTHREAD_START_ROUTINE ThRotina;

#define INFINITO 0xFFFFFFFF

class Thread
{
      private:
           HANDLE TH;
           DWORD ThID;

      public:
           void Criar();
           void Pausar();
           void Resumir();
           void Terminar();
           void Esperar(DWORD tempo);

           ThRotina ThFuncao;
           BOOL Pausada;
           LPCVOID Parametro;
         
      };



             
//////////////////////////////////////////////////////////////////////////////////////////
void  Thread::Criar()
{
      if(Pausada == TRUE)
         TH = CreateThread(0,0,(ThRotina)ThFuncao,(LPVOID)Parametro,CREATE_SUSPENDED,&ThID);
      else
         TH = CreateThread(0,0,(ThRotina)ThFuncao,(LPVOID)Parametro,0,&ThID);
       
       if(!TH)
       throw "Ocorreu um erro ao criar a Thread.\n";
}
//////////////////////////////////////////////////////////////////////////////////////////


void Thread::Pausar()
{
     if(SuspendThread(TH) == -1)
       throw "Ocorreu um erro ao pausar a Thread.\n";
   
}       
//////////////////////////////////////////////////////////////////////////////////////////
               
void Thread::Resumir()
{
     if(ResumeThread(TH) == -1)
       throw "Ocorreu um erro ao resumir a Thread.\n";
}       
//////////////////////////////////////////////////////////////////////////////////////////

void Thread::Esperar(DWORD tempo)
{
WaitForSingleObject(TH,tempo);
}

//////////////////////////////////////////////////////////////////////////////////////////

void Thread::Terminar()
{
     if(!TerminateThread(TH,0))
       throw "Erro ao terminar Thread.\n";
       
     if(!CloseHandle(TH))
       throw "Erro ao fechar o objeto da Thread.\n";
}
//////////////////////////////////////////////////////////////////////////////////////////


Códigos de exemplo:

http://three.fsphost.com/darkside/exemplos_thread.rar

Bye xD

rog

beleza dark side

qual e a diferença entre esse  CreateThread e o shellexecuteex ?
realty.sys is corrupt :  reboot the universe (Y/N)

Dark_Side

Hi,

A diferença básica entre as funções CreateThread() e ShellExecuteEx é que, enquanto a primeira é utilizada para criar uma espécie de "sub-processo" dentro de um processo maior, chamando por uma determinada função e permitindo que essa função seja excutada simultaneamente com outras, utiliza-se a função ShellExecuteEx para executarmos um arquivo externo passando parâmetros contidos em uma estrutura denominada SHELLEXECUTEINFO. Esta, por sua vez, contém várias atribuições, como por exemplo, o modo de exibição do tal arquivo, o modo pelo o qual o programa será aberto, dentre outras.

Para mais informações:

http://msdn.microsoft.com/library/defau ... cuteex.asp

http://msdn.microsoft.com/library/defau ... teinfo.asp

http://msdn.microsoft.com/library/defau ... launch.asp

http://msdn2.microsoft.com/en-us/library/ms682453.aspx

É basicamente isso...
Bye xd