Visual C++ .NET - ¿Cómo usar System::Threading?

 
Vista:

¿Cómo usar System::Threading?

Publicado por Al (1 intervención) el 12/01/2008 22:49:41
Hola a todos. Necesito usar la clase System::Threading para aprovechar las ventajas de los procesos multihilos en una aplicación construida en Visual C++. Me sería útil contar con una guía de cómo utilizar esta clase o un listado con los métodos de la misma o incluso ejemplos. Así mismo preguntaros, si alguno de vosotros conoce alguna forma mejor de acceder a hilos con alguna otra clase que no sea POSIX.

Un saludo y gracias a todos.
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de Alejandro

Trabajo con hilos y sincronización usando System::Threading

Publicado por Alejandro (265 intervenciones) el 02/02/2024 19:37:12
Al. para trabajar con multihilos en C++/CLI utilizando la clase `System::Threading`, puedes seguir la siguiente guía básica. `System::Threading` en C++/CLI es parte de la biblioteca .NET Framework y proporciona un conjunto de clases para trabajar con hilos.

Crear y ejecutar un hilo:



1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
using namespace System;
using namespace System::Threading;
 
void MiMetodo() {
    // Código del hilo
    Console::WriteLine("Hilo secundario ejecutando.");
}
 
int main() {
    // Crear un nuevo hilo y asociarlo con el método MiMetodo
    Thread^ miHilo = gcnew Thread(gcnew ThreadStart(&MiMetodo));
 
    // Iniciar la ejecución del hilo
    miHilo->Start();
 
    // Código del hilo principal
    Console::WriteLine("Hilo principal ejecutando.");
 
    // Esperar a que el hilo secundario termine
    miHilo->Join();
 
    return 0;
}

Métodos importantes de `System::Threading::Thread`:



- `Start()`: Inicia la ejecución del hilo.
- `Join()`: Bloquea el hilo que llama hasta que el hilo en el que se llama ha finalizado su ejecución.
- `Sleep(int millisecondsTimeout)`: Hace que el hilo actual duerma durante el tiempo especificado.
- `Abort()`: Detiene el hilo.

Ejemplo de uso de mutex para sincronización:



1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
using namespace System;
using namespace System::Threading;
 
int contador = 0;
Mutex^ mutex = gcnew Mutex();
 
void IncrementarContador() {
    for (int i = 0; i < 100000; i++) {
        mutex->WaitOne();  // Espera a que se desbloquee el mutex
        contador++;
        mutex->ReleaseMutex();  // Libera el mutex
    }
}
 
int main() {
    Thread^ hilo1 = gcnew Thread(gcnew ThreadStart(&IncrementarContador));
    Thread^ hilo2 = gcnew Thread(gcnew ThreadStart(&IncrementarContador));
 
    hilo1->Start();
    hilo2->Start();
 
    hilo1->Join();
    hilo2->Join();
 
    Console::WriteLine("El valor final del contador es: " + contador);
 
    return 0;
}

Este ejemplo utiliza un `Mutex` para sincronizar el acceso al contador desde múltiples hilos.

Recuerda que este código está diseñado para trabajar en el entorno de .NET, y si decides utilizar otra biblioteca o plataforma, los detalles de implementación pueden variar. La clase `System::Threading` es específica de .NET y es una forma común y efectiva de trabajar con hilos en aplicaciones de C++/CLI.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar