Crear una consola por hilo.

Iniciado por SARGE553413, 7 Julio 2014, 15:48 PM

0 Miembros y 1 Visitante están viendo este tema.

SARGE553413

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.

Ari Slash

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 (csharp) [Seleccionar]

Thread t = new Thread(new ThreadStart(ThreadProc));
t.Start();

Thread t2 = new Thread(new ThreadStart(ThreadProc2));
t2.Start();

kub0x

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!
Viejos siempre viejos,
Ellos tienen el poder,
Y la juventud,
¡En el ataúd! Criaturas Al poder.

Visita mi perfil en ResearchGate


SARGE553413

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.

Eleкtro

#4
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.