En principio habria que saber que un thread es un proceso que se ejecuta paralelamente a la aplicacion. Desde el punto de vista de Boost (aunque dentro de poco será std::thread), un thread es una clase, que podemos crear cuando queramos. Si tenemos instalado boost como libreria global a todo el sistema, no necesitamos nada para compilarlo. El código seria este:
#include "iostream" #include "boost/thread.hpp" void hola() { std::cout<<"Hola mundos paralelos!!!\n"; } int main() { boost::thread t(hola); t.join(); }
Si esto te compila y ejecuta sin quejarse es que tienes bien instalado Boost. ¿Pero funciona realmente?
Vamos a probar esto:
#include "iostream" #include "boost/thread.hpp" const unsigned int MAX = 1000; void hola() { for(unsigned int i = 0; i < MAX; ++i) { std::cout << "Mensaje dentro de la funcion HOLA numero " << i << "\n"; } } int main() { boost::thread t(hola); for(unsigned int j = 0; j < MAX; ++j) { std::cout << "Mensaje desde el main con numero " << j << "\n"; } t.join(); }Si redireccionas la salida a un archivo, por que son 2000 lineas, tendrás que las lineas no salen separadas. Puedes encontrar lineas como esta:
Mensaje desde el main con numero Mensaje dentro de la funcion HOLA numero 13Los carácteres entran cuando pueden, aunque pise media frase en el camino del otro thread.
Mensaje desde el main con numero 1014
Y que hace este código? Pues primero creamos un objeto thread. Como parámetro del constructor, le pasamos la función que queremos ejecutar. Luego viene el bucle que escribe mensajes en el thread principal, aunque dentro del thread tambien se estan enviando mensajes. Una vez acaba el bucle principal, si no hubiera nada más, el programa principal acabaria y el thread se quedaria alli haciendo lo que sea que tiene que hacer.
Para decir al programa que cierre el thread antes de irse, llamamos a join() que es como pedirle al programa que espere en ese punto al thread antes de continuar, y despues continue.
Y asi acaba la primera entrada sobre threads.
No hay comentarios:
Publicar un comentario