Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: Kaxperday en 26 Septiembre 2015, 20:31 pm



Título: Threads y travesuras en C++
Publicado por: Kaxperday en 26 Septiembre 2015, 20:31 pm
Hola a todos,

hasta ahora cuando he trabajado con subprocesos he trabajado con async(), pero es lo mismo que un thread o mejor?. Además no son autenticos thread ¿no?.

Lo digo porque cuando programaba en C# y creaba un nuevo thread en el administrador de tareas salían 2 ejecutables con el nombre del programa el normal y el del thread, sin embargo en cpp ¿como se crea un thread así?.

También el mutex me vuelve un poco loco, da muchos errores, la verdad me esta costando trabajar con procesos bastante XD. ¿Dónde lo declaro para que haya uno único para todo el programa.

Simplemente lo necesito para hacer el reescaneo de hosts ya que allí actualizo la lista de victimas, meto mutex actualizo lista y unlock(), y en todas las partes del programa que se accede a la lista lo mismo lock() y unlock() al salir, es horrible.

Saludos.


Título: Re: Threads y travesuras en C++
Publicado por: ivancea96 en 26 Septiembre 2015, 20:50 pm
Citar
en todas las partes del programa que se accede a la lista lo mismo

Plantéate englobar todas las partes que hagan lo mismo en un set de funciones o en una clase.


Título: Re: Threads y travesuras en C++
Publicado por: Kaxperday en 1 Octubre 2015, 09:55 am
Si eso hago todas las funciones y subthreads que usan la lista de usuarios que es comun a todas ellas las corro en una función, donde la lista de usuarios es un atributo.

Cuando alguien la modifica antes de eso llamo al mutex, pero es un lío horrible, a veces va mejor cuando no pongo mutex XD.

Busqué acerca de los auténticos threads y los encontré:

https://msdn.microsoft.com/en-us/library/windows/desktop/ms682453(v=vs.85).aspx

Pero no es exactamente lo que pensaba, ¿como puedo ejecutar una función de mi programa en otro proceso aparte?, ¿algúen ejemplo?.

Gracias, saludos.


Título: Re: Threads y travesuras en C++
Publicado por: ivancea96 en 1 Octubre 2015, 15:57 pm
Busqué acerca de los auténticos threads y los encontré

Ya que C++11 tiene threads, está bien que los uses.


Título: Re: Threads y travesuras en C++
Publicado por: Kaxperday en 1 Octubre 2015, 20:27 pm
Ya se a que "threads" te refieres y no son los "autenticos", ya que la clase thread no me crea un subthread.

He creado threads en C# y al ver mi app corriendo en el administrador de tareas me salian varios subthreads (los que había creado).

Sin embargo con C++ hice la prueba de hacer varias clases threads que ejecutaran funciones como en C# hacían y en el administrador de tareas no salía más que uno, y ningún subthread.

Luego la clase thread es lo mismo que auto x = async()... etc que ejecutan un poco uno y luego el otro y así, y no son thread al menos a los que me refiero. Si hay varios de esos el programa no daria a basto necesita un subproceso, otro programa independiente para no cargar tanto el proceso en ejecucion, dividirlo en varios procesos.

Saludos

Parece que esto es a lo que me refería:

https://msdn.microsoft.com/en-us/library/windows/desktop/ms682516(v=vs.85).aspx

Saludos.


Título: Re: Threads y travesuras en C++
Publicado por: ivancea96 en 1 Octubre 2015, 22:03 pm
La clase thread, crea y representa un thread, que es lo que es.

Usando C++11 no hay razón para utilizar threads de WinAPI.
Un thread cumple la función perfectamente.

Luego la clase thread es lo mismo que auto x = async()... etc que ejecutan un poco uno y luego el otro y así, y no son thread al menos a los que me refiero. Si hay varios de esos el programa no daria a basto necesita un subproceso, otro programa independiente para no cargar tanto el proceso en ejecucion, dividirlo en varios procesos.

Si pones 1 thread por procesador (contando el principal), con máxima prioridad, usarás toda al CPU, si es lo que pretendes. Los threads, son threads. Son sub-procesos. Y como tales, pueden ejecutarse en paralelo si hay múltiples procesadores. Esa es la función de los threads. En caso de 1 solo procesador, siguen haciendo su función, que es dividir los hilos de ejecución.

¿Qué no ves correcto?
(https://i.gyazo.com/411a5fccab4bbec5523c75adb8f34773.png)


Título: Re: Threads y travesuras en C++
Publicado por: Kaxperday en 3 Octubre 2015, 13:42 pm
Hola ivancea, gracias por la respuesta era justo lo que quería saber, no estaba seguro de que creará los subthreads pues en el administrador de tareas no aparecen que es donde los buscaba, y hasta ahora desconocia que existía el monitor de recursos.

Saludos.