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
Ir a la versión completa