Programación General > C/C++

 función _beginthreadex en Linux

(1/1)

bertamax:
Hola a todos, estoy buscando sobre esta función porque no sé cómo se utiliza, busco en buscadores de programación de C en Linux no encuentro nada y me han comentado que es igual que en Windows, sólo que cambia las cabeceras, entonces encontré en msdn un tutorial muy bueno que en teoría entiendo esta función pero a la hora de la práctica no se utilizar, o sea que yo tengo una lista de parámetros y cómo lo transformo a un puntero a void, muchas gracias

diego.martinez:
Buenas:


--- Cita de: "bertamax" --- busco en buscadores de programación de C en Linux no encuentro nada y me han comentado que es igual que en Windows,
--- Fin de la cita ---
no te vendria mejor usar fork()? , de esta encontraras miles de tutoriales


--- Cita de: "bertamax" ---entiendo esta función pero a la hora de la práctica no se utilizar
--- Fin de la cita ---

bueno, _beginthread recibe como primer parametro un puntero a una funcion void (void*). O sea, primero preparas una funcion que devuelva void y que reciba un puntero void como parametro , en la que este el cuerpo del proceso paralelo que vayas a usar. Despues, le pasas el nombre de la funcion como primer parametro de _beginthread. Como segundo parametro pasale un 0. Como tercer parametro, pasale un puntero a void del dato que quieres que reciba el proceso como dato.

Que es eso de un puntero a void? normalmente, los punteros son de un tipo de dato, sin embargo, cualquier direccion de memoria puede representarse como un puntero void* que indica una direccion de memoria sin saber que hay en ella.  Mirate en google Casting.

Si quieres pasarle multiples datos, o bien te los preparas en una estructura de datos y le pasas el puntero (vectores, arrays, mapas...) o bien te preparas una estructura y le calzas los datos, si son fijos. Al convertirla en un puntero void* no puedes usar de nuevo la estructura a no ser que la recastees en el tipo original.

ejemplo, un temporizador para pobres:

--- Código: C++ ---  //una estructura para guardar los multiples datostypedef struct TIPO_DATO{int hora;int minutos;int segundos;}; //una funcion void(void*) que contiene el cuerpo del proceso y que termina con _endthread();void hilo(void * datos){TIPO_DATO * in=(TIPO_DATO*)datos; int tot=in.horas*3600 + in.minutos*60 + in.segundos; Sleep(tot*1000); MessageBox(0,"TIME UP!",0,0); _endthread();}  //bucle principal en el que se lanza el hilo y luego se paraliza en un bucle. void main(void){TIPO_DATO dat; dat.horas=0;dat.minutos=1;dat.segundos=30;  _beginthread(hilo,0,&dat); while(true){Sleep(1);  //fjate en esto! } }   
en el bucle he colocado un Sleep, por que si no le dejas descansar al hilo para hacer los cambios de contexto, el programa subira al 99% de CPU.


espero que te  haya ayudado!  :good:

bertamax:
Muchas gracias, ya lo entiendo y lo he implementado.

Navegación

[0] Índice de Mensajes

Ir a la versión completa