Threads, Hilos en C++

Iniciado por Ahustinkrone, 17 Junio 2014, 01:18 AM

0 Miembros y 1 Visitante están viendo este tema.

Ahustinkrone

Hola, necesito crear thread pero por mas que busco, no encuentro algún tutorial de como funcionan e utilizan los mismos.. si alguien me podría explicar o pasarme unos links de tutoriales estaría muy agradecido!

PD: es para un programa de windows, por lo tanto no es problema usar la API de windows is es necesario.

ivancea96

Si utilizas C++11, tienes la clase std::thread, con un funcionamiento muy sencillo:

Código (cpp) [Seleccionar]
std::thread th(&funcion,parametro1,parametro2 /* ... */);
th.detach();


Le pasas como primer parámetro, la dirección de la función, y luego los parámetros que ha de pasarle a esa función. Desde que creas el objeto, el nuevo hilo empieza a funcionar con la función.

Tienes varias funciones, como th.join(), que deja el hilo que la llama en pausa hasta que "th" termina la función.

Ahustinkrone

:/ no uso C++11, pero gracias igual.

x64core

Cita de: Ahustinkrone en 17 Junio 2014, 01:18 AM
Hola, necesito crear thread pero por mas que busco, no encuentro algún tutorial de como funcionan e utilizan los mismos.. si alguien me podría explicar o pasarme unos links de tutoriales estaría muy agradecido!

PD: es para un programa de windows, por lo tanto no es problema usar la API de windows is es necesario.
Como primero recomiendo algun libro especializado en hilos en windows, NT internals, etc y la MSDN:
http://msdn.microsoft.com/en-us/library/windows/desktop/ms684841(v=vs.85).aspx

eferion

Cita de: Ahustinkrone en 17 Junio 2014, 01:48 AM
:/ no uso C++11, pero gracias igual.

Usas un compilador antiguo?? si usas uno mínimamente actualizado tienes la opción de usar, en el peor de los casos, algunas características de C++11 sin problemas.

daryo

#5
un ejemplo con  la winapi:
#include <stdio.h>
#include <windows.h>

DWORD WINAPI hilo(LPVOID LPARAM);


int main()
{
HANDLE MiHilo;
DWORD  IdDelHilo;

MiHilo=CreateThread(NULL,0,hilo,NULL,0,& IdDelHilo);
MessageBox(NULL,"2","ventana",MB_OK);

return 0;
}

DWORD WINAPI hilo(LPVOID LPARAM)
{
  MessageBox(NULL,"1","ventana",MB_OK);

}

buenas