Foro de elhacker.net

Programación => .NET (C#, VB.NET, ASP) => Mensaje iniciado por: SARGE553413 en 7 Julio 2014, 15:48 pm



Título: Crear una consola por hilo.
Publicado por: SARGE553413 en 7 Julio 2014, 15:48 pm
Hola a todos.

Quiero lanzar 2 hilos y que cada uno de ellos abra una ventana de consola y escriba en ella un mensaje.

He estado buscando por internet y no encuentro ningún sitio donde expliquen esto.

¿Cómo puede hacerse esto en C# o c++/cli?

Saludos y gracias.


Título: Re: Crear una consola por hilo.
Publicado por: Ari Slash en 7 Julio 2014, 16:15 pm
http://msdn.microsoft.com/es-es/library/system.threading.thread.aspx

Hay mucha documentacion, en el ejemplo, simplemente crea otra funcion, adicional a "ThreadProc" y obviamente similar, en el main:

Código
  1. Thread t = new Thread(new ThreadStart(ThreadProc));
  2. t.Start();
  3.  
  4. Thread t2 = new Thread(new ThreadStart(ThreadProc2));
  5. t2.Start();
  6.  


Título: Re: Crear una consola por hilo.
Publicado por: kub0x en 7 Julio 2014, 16:31 pm
Buenas SARGE553413,

me imagino que lo que ha puesto Ari Slash ya lo conocerías (iniciar/spawnear threads). Sino en C++/CLI igual con CreateThread te sirve y no tienes que usar el Framework.

La otra cuestión: para adjuntar una consola al proceso tienes que hacer uso de la función AllocConsole y AttachConsole, las cuales se encargan de gestionar los recursos (std-in/out/err) y su anexamiento al proceso actual. El framework nos abstrae de esta tarea, por lo que te tocará implementar.

Según la MSDN:

Citar
A process can be associated with only one console, so the AllocConsole function fails if the calling process already has a console.....

A process can be attached to at most one console. If the calling process is already attached to a console, the error code returned is ERROR_ACCESS_DENIED....

Aún así no desesperes, aquí te dejo algo más detallado que podría darte una solución, además como trabajas sobre C++/CLI estás mas cerca del low-level así te ahorras la interoperabilidad con .NET (el famoso Marshalling, P/Invoke).

http://msdn.microsoft.com/en-us/library/windows/desktop/ms682528%28v=vs.85%29.aspx

Saludos!


Título: Re: Crear una consola por hilo.
Publicado por: SARGE553413 en 7 Julio 2014, 23:18 pm
Gracias por las respuestas.

Creo que se lo que hago mal, yo hacía lo de AllocConsole() (y no funcioanan, todos escribían en la misma consola) con cada hilo, pero luego no hacía el AttachConsole(), probaré eso.

Además imagino que no podré usar Console::WriteLine() porque ese Console es la misma para todos los hilos?, ¿como una variable global quizá?

Bueno probaré y os digo.

Saludos.


Título: Re: Crear una consola por hilo.
Publicado por: Eleкtro en 12 Julio 2014, 21:16 pm
Una alternativa bastante sucia, dada la prohibición de adjuntar más de 1 consola por proceso, podría ser esta:

Por cada thread que inicies, ejecutas una CMD (instanciando la Class Process, nada de adjuntar mediante la WinAPI), y ya tendrías una consola "adjuntada" y distinta por cada thread, con todo el control necesario para escribir en el Buffer de cada una de ellas.

Saludos.