Título: pasar argumentos por un CreateThread? Publicado por: while en 13 Octubre 2010, 23:30 pm Así es como venía usandolos:
unsigned long __stdcall mithread( void* pVoid ) { ... } CreateThread( 0, 0, &mithread, 0, 0, 0 ); El caso es que ahora necesito pasarle un argumento, algo así como: unsigned long __stdcall mithread( void* pVoid, char* nombre ) { ... } CreateThread( 0, 0, &mithread, "asdf", 0, 0 ); Pero esta no es la forma correcta. Alguien puede decirme como es? Gracias! Título: Re: pasar argumentos por un CreateThread? Publicado por: Eternal Idol en 14 Octubre 2010, 00:34 am Código
Usando ese misma logica podes pasar el puntero a una estructura con diferentes campos. Título: Re: pasar argumentos por un CreateThread? Publicado por: while en 14 Octubre 2010, 01:30 am ah claro, no había caido.
Muchas gracias eternal idol. Una pregunta mas, puedo pasar otro argumento mas por el CreateThread? algo asi como: unsigned long __stdcall mithread( void* pVoid, void* pVoid2) CreateThread( 0, 0, &mithread, "asdf1", "asdf2", 0 ); Gracias de nuevo. Título: Re: pasar argumentos por un CreateThread? Publicado por: Eternal Idol en 14 Octubre 2010, 02:18 am No:
http://msdn.microsoft.com/en-us/library/ms682453%28VS.85%29.aspx http://msdn.microsoft.com/en-us/library/ms686736%28v=VS.85%29.aspx Solo se pasa y recibe un parametro PERO como te dije antes podes usar un puntero a una estructura muy facilmente. Código
No comprobe el codigo, es tarde, pero seguro te podes hacer una idea con el. Título: Re: pasar argumentos por un CreateThread? Publicado por: while en 14 Octubre 2010, 03:06 am Hola, buena idea para pasarlos, pero debe haber algo mal, y no veo que es:
PParams params = (PParams)pVoid; MessageBox(0,params->arga,"Title",MB_OK); MessageBox(0,params->argb,"Title",MB_OK); estos devuelven simbolos raros, y no el texto que les he pasado. Gracias de nuevo Título: Re: pasar argumentos por un CreateThread? Publicado por: Eternal Idol en 14 Octubre 2010, 09:31 am No se como habras hecho pero esto ya funciona:
Código
Título: Re: pasar argumentos por un CreateThread? Publicado por: while en 14 Octubre 2010, 13:23 pm Si lo compilo en una aplicación de consola me funciona, pero luego en la dll, mira que me devuelve:
(http://img832.imageshack.us/img832/7670/asdfqi.png) Título: Re: pasar argumentos por un CreateThread? Publicado por: Eternal Idol en 14 Octubre 2010, 13:53 pm Depuralo para ver que pasas y recibis; depende del codigo pero si estas pasando una estructura que esta en la pila y la funcion retorna ya no es confiable el puntero.
Título: Re: pasar argumentos por un CreateThread? Publicado por: while en 14 Octubre 2010, 14:28 pm y podria pasar algo asi como:
char *array_parametros[] = { "asdf1", "asdf2" }; ? Si no, supongo que podria hacer una función intermedia que cree el thread CrearThread("asdf1","asdf2"); y luego en CrearThread() Concatenar asdf1 y asdf2 separados por un caracter como asdf1§asdf2 y pasarlos por el create thread como un unico parametro, y luego que el thread los separe y los meta en su correspondiente variable. Que te parece esto último? Saludos, y gracias de nuevo Título: Re: pasar argumentos por un CreateThread? Publicado por: Eternal Idol en 14 Octubre 2010, 15:03 pm Podrias, no hay diferencia en teoria, array_parametros podria desaparecer de su ambito y apuntar a cualquier lado sus elementos, lo que si podes hacer es usar una variable global ... depende del codigo, hay varias alternativas.
Lo ultimo me parece una solucion rebuscada y poco fiable. Título: Re: pasar argumentos por un CreateThread? Publicado por: while en 14 Octubre 2010, 22:42 pm He probado la última opción y tengo algunos problemas al concatenar y pasar por el thread:
FuncionLlamarThread("asdfA","asdfB"); ... void FuncionLlamarThread(char *a1, char *a2) { char finaldefinido[50]; sprintf(finaldefinido, "%s-%s", a1, a2); char *final = finaldefinido; MessageBox(0, final, "Title",MB_OK); // Funciona, por lo que aparentemente se han concatenado. CreateThread( 0, 0, &mithread, final, 0, 0 ); } Pero luego el mithread, el messagebox aparece en blanco al hacer: char *nombre = (char*)pVoid; MessageBox(0, nombre, "Title",MB_OK); Título: Re: pasar argumentos por un CreateThread? Publicado por: Eternal Idol en 14 Octubre 2010, 23:41 pm "Depuralo para ver que pasas y recibis; depende del codigo pero si estas pasando una estructura que esta en la pila y la funcion retorna ya no es confiable el puntero."
"... podria desaparecer de su ambito ..." void FuncionLlamarThread(char *a1, char *a2) { char finaldefinido[50]; ... } Tu cadena esta en la pila y su ambito es local a la funcion. |