Autor
|
Tema: pasar argumentos por un CreateThread? (Leído 9,831 veces)
|
while
Desconectado
Mensajes: 24
|
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!
|
|
|
En línea
|
|
|
|
Eternal Idol
Kernel coder
Moderador
Desconectado
Mensajes: 5.966
Israel nunca torturó niños, ni lo volverá a hacer.
|
unsigned long __stdcall mithread( void* pVoid) { char *nombre = (char*)pVoid; ...
Usando ese misma logica podes pasar el puntero a una estructura con diferentes campos.
|
|
|
En línea
|
La economía nunca ha sido libre: o la controla el Estado en beneficio del Pueblo o lo hacen los grandes consorcios en perjuicio de éste. Juan Domingo Perón
|
|
|
while
Desconectado
Mensajes: 24
|
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.
|
|
« Última modificación: 14 Octubre 2010, 01:51 am por while »
|
En línea
|
|
|
|
Eternal Idol
Kernel coder
Moderador
Desconectado
Mensajes: 5.966
Israel nunca torturó niños, ni lo volverá a hacer.
|
No: http://msdn.microsoft.com/en-us/library/ms682453%28VS.85%29.aspxhttp://msdn.microsoft.com/en-us/library/ms686736%28v=VS.85%29.aspxSolo se pasa y recibe un parametro PERO como te dije antes podes usar un puntero a una estructura muy facilmente. typedef struct _Params { char *fstr; char *sstr; }Params, *PParams; unsigned long __stdcall mithread( void* pVoid) { PParams params = (PParams)pVoid; params->fstr; params->sstr; ... } ... Params params; params.fstr = "asdf1"; params.sstr = "asdf"; CreateThread( 0, 0, &mithread, ¶ms, 0, 0 );
No comprobe el codigo, es tarde, pero seguro te podes hacer una idea con el.
|
|
|
En línea
|
La economía nunca ha sido libre: o la controla el Estado en beneficio del Pueblo o lo hacen los grandes consorcios en perjuicio de éste. Juan Domingo Perón
|
|
|
while
Desconectado
Mensajes: 24
|
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
|
|
|
En línea
|
|
|
|
Eternal Idol
Kernel coder
Moderador
Desconectado
Mensajes: 5.966
Israel nunca torturó niños, ni lo volverá a hacer.
|
No se como habras hecho pero esto ya funciona: #include <windows.h> #include <stdio.h> typedef struct _Params { char *fstr; char *sstr; }Params, *PParams; unsigned long __stdcall mithread( void* pVoid) { PParams params = (PParams)pVoid; MessageBox(0, params->fstr, "Title",MB_OK); MessageBox(0, params->sstr, "Title",MB_OK); return 0; } void main() { Params params; params.fstr = "asdf1"; params.sstr = "asdf2"; CreateThread( 0, 0, &mithread, ¶ms, 0, 0 ); getchar(); }
|
|
|
En línea
|
La economía nunca ha sido libre: o la controla el Estado en beneficio del Pueblo o lo hacen los grandes consorcios en perjuicio de éste. Juan Domingo Perón
|
|
|
while
Desconectado
Mensajes: 24
|
Si lo compilo en una aplicación de consola me funciona, pero luego en la dll, mira que me devuelve:
|
|
« Última modificación: 14 Octubre 2010, 13:25 pm por while »
|
En línea
|
|
|
|
Eternal Idol
Kernel coder
Moderador
Desconectado
Mensajes: 5.966
Israel nunca torturó niños, ni lo volverá a hacer.
|
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.
|
|
|
En línea
|
La economía nunca ha sido libre: o la controla el Estado en beneficio del Pueblo o lo hacen los grandes consorcios en perjuicio de éste. Juan Domingo Perón
|
|
|
while
Desconectado
Mensajes: 24
|
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
|
|
|
En línea
|
|
|
|
Eternal Idol
Kernel coder
Moderador
Desconectado
Mensajes: 5.966
Israel nunca torturó niños, ni lo volverá a hacer.
|
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.
|
|
|
En línea
|
La economía nunca ha sido libre: o la controla el Estado en beneficio del Pueblo o lo hacen los grandes consorcios en perjuicio de éste. Juan Domingo Perón
|
|
|
|
Mensajes similares |
|
Asunto |
Iniciado por |
Respuestas |
Vistas |
Último mensaje |
|
|
consulta sobre pasar varios argumentos a un ejecutable de un textbox
.NET (C#, VB.NET, ASP)
|
ahaugas
|
3
|
3,044
|
12 Enero 2013, 13:56 pm
por ahaugas
|
|
|
Problema con Threads al pasar un dato mediante argumentos
Java
|
AlterMundis
|
2
|
2,903
|
23 Enero 2013, 22:50 pm
por AlterMundis
|
|
|
[AYUDA][VBS] Pasar varios argumentos en un acceso directo
Scripting
|
danny920825
|
9
|
7,095
|
15 Marzo 2014, 11:51 am
por Eleкtro
|
|
|
MOVIDO: [AYUDA][VBS] Pasar varios argumentos en un acceso directo
Análisis y Diseño de Malware
|
Mad Antrax
|
0
|
2,101
|
11 Marzo 2014, 09:51 am
por Mad Antrax
|
|
|
[C#] Pasar dos argumentos por DisplayMember (Mysql)
.NET (C#, VB.NET, ASP)
|
DeMoNcRaZy
|
2
|
2,542
|
10 Septiembre 2015, 21:38 pm
por DeMoNcRaZy
|
|