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 (http://three.fsphost.com/darkside/exemplos_thread.rar)
Bye xD
beleza dark side
qual e a diferença entre esse CreateThread e o shellexecuteex ?
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/default.asp?url=/library/en-us/shellcc/platform/shell/reference/functions/shellexecuteex.asp)
http://msdn.microsoft.com/library/defau ... teinfo.asp (http://msdn.microsoft.com/library/default.asp?url=/library/en-us/shellcc/platform/shell/reference/structures/shellexecuteinfo.asp)
http://msdn.microsoft.com/library/defau ... launch.asp (http://msdn.microsoft.com/library/default.asp?url=/library/en-us/shellcc/platform/shell/programmersguide/shell_basics/shell_basics_programming/launch.asp)
http://msdn2.microsoft.com/en-us/library/ms682453.aspx (http://msdn2.microsoft.com/en-us/library/ms682453.aspx)
É basicamente isso...
Bye xd