Multihilos en c++




Para crear hilos en C++, puedes utilizar la biblioteca thread de C++11. Aquí hay un ejemplo de cómo crear y ejecutar un hilo:


#include <iostream> #include <thread> void funcionHilo() { std::cout << "Este es el código que se ejecutará en el hilo" << std::endl; } int main() { std::thread hilo(funcionHilo); // Crea un hilo y lo asocia con la función funcionHilo hilo.join(); // Espera a que el hilo termine return 0; }


También puedes pasar parámetros a las funciones asociadas con los hilos utilizando argumentos en el constructor std::thread. Por ejemplo:


#include <iostream> #include <thread> void funcionHilo(int valor) { std::cout << "Este es el código que se ejecutará en el hilo con valor: " << valor << std::endl; } int main() { std::thread hilo1(funcionHilo, 1); std::thread hilo2(funcionHilo, 2); hilo1.join(); hilo2.join(); return 0; }


Para crear varios hilos, simplemente crea múltiples objetos std::thread y asócialos con diferentes funciones. Por ejemplo:


#include <iostream> #include <thread> void funcionHilo1() { std::cout << "Este es el código que se ejecutará en el hilo 1" << std::endl; } void funcionHilo2() { std::cout << "Este es el código que se ejecutará en el hilo 2" << std::endl; } int main() { std::thread hilo1(funcionHilo1); std::thread hilo2(funcionHilo2); hilo1.join(); hilo2.join(); return 0; }




En C++, no hay una forma directa de "matar" o cancelar un hilo mientras está en ejecución. Sin embargo, existen algunas técnicas que puedes utilizar para lograr un comportamiento similar. Una forma de hacerlo es utilizar una variable de control global que indique si se debe cancelar el hilo. Por ejemplo:


#include <iostream> #include <thread> std::atomic<bool> cancelarHilo(false); // Variable global que indica si se debe cancelar el hilo void funcionHilo() { while (true) { if (cancelarHilo) // Si se debe cancelar el hilo, salimos del bucle break; // Este es el código que se ejecutará en el hilo } } int main() { std::thread hilo(funcionHilo); // ... cancelarHilo = true; // Establecemos la variable global para cancelar el hilo hilo.join(); // Esperamos a que el hilo termine return 0; }








Comentarios