Menú

Mostrar Mensajes

Esta sección te permite ver todos los mensajes escritos por este usuario. Ten en cuenta que sólo puedes ver los mensajes escritos en zonas a las que tienes acceso en este momento.

Mostrar Mensajes Menú

Mensajes - ivancea96

#2181
Cuando uses async() o threads, no olvides manejar variables con mutec u otro tipo de controlador. Especialmente si andas con clases o estructuras. Y más especialmente si andas con punteros.
#2182
Por parte de C, () lo interpreta <que yo sepa> igual en ambos casos. No te lo tomes como un fallo, sino como una ayuda al hacer funciones de callback, pues te ayuda a evitar andar poniendo (*)
#2183
Lo único que se me ocurre es que se llame 30 veces 30 hilos diferentes, y todos invoquen el MessageBox. Luego, cuando empiezas a cerrarlos, finalmente siguen y terminen los threads.

Haz una prueba: en vez de "g++" y " char msg[100]", saca al archivo "1 -> " + threadID y "2 -> " + threadID.

Si la teoría es cierta, el primer mensaje tendrá el mismo ID que el primer mensaje del segundo conjunto, y etc.
#2184
Código (cpp) [Seleccionar]
Nodo*  Nodo::Insertar_Nodo(int valor, Nodo*subArbol)
#2185
¿Es posible que MessageBox() acabe provocando un timeout en el hook? Tengo entendido de que Windows 7 y en adelante eliminan hooks si se pasan del timeout. Puedes comprobarlo. Aunque no seguro que tenga que ver con eso.

Edito: A todo esto:

Código (cpp) [Seleccionar]
while (!GetMessage(&msg, 0, 0, 0))

GetMessage retorna 0 cuando obtiene el mensaje WM_QUIT.
#2186
Sin palabras. Si encuentras la solución, coméntala :p
#2187
Solo por si acaso, ¿despues del MessageBox se sigue ejecutando código? Pon otro MessageBox a ver.
#2188
Código (cpp) [Seleccionar]
for (int i = 0; i < usuarios.size(); i++)
{
salida = 0;
for (int j = 0; j < 4; j++)
{
if (ip[j] != usuarios[i].ip[j])
{
salida++;
break;
}
}

for (int j = 0; j < 6; j++)
{
if (mac[j] != usuarios[i].mac[j])
{
salida++;
break;
}
}
printf("salida %d\n", salida);

if (salida == 2)
{
printf(" ENTRA \n");
host usuario;
for (int j = 0; j < 4; j++)
{
usuario.ip[j] = ip[j];
}
for (int j = 0; j < 6; j++)
{
usuario.mac[j] = mac[j];
}
usuarios.push_back(usuario);
break;
}
}


El if del final se ejecuta 1 vez por cada usuario. Lo que debes hacer es sacarlo del bucle, y en el bucle poner un return (o lo que quieras) si alguno se repite.

Tal como lo tienes, en cuanto encuentra 1 que es diferente, va a añadir el nuevo, y hacer break;
#2189
realloc() lo que hace es volver a coger una zona de memoria de X tamaño, y copiar lo que había en la anterior. Ahí, el tamaño que le pasas a realloc es siempre sizeof(char*), así que nunca cambia. Tal vez quisieras poner sizeof(char*)*(i+1).
#2190
Si es posible, pon el error. El error contiene toda la información necesaria para poder arreglarlo.

EDITO: El error es, por ejemplo en:
Código (cpp) [Seleccionar]
Nodo::Nodo* InsertaNodo(int valor, Nodo*subArbol)
{
   if(subArbol==NULL)
   {
      subArbol=new Nodo;
      subArbol->HijoIzquierdo=subArbol->HijoDerecho=NULL;
      subArbol->dato=valor;
   }


subArbol->HijoIzquierdo es un valor privado. Si bien es cierto que eso es un método de Nodo, solo puedes acceder a los métodos y campos private y protected del mismo objeto.