|
Is there a way to find all the thread names that are running in a
project?
For example, if I have 5 threads T1, T2, T3, T4, T5...and T2, T4, and
T5 are running...I want to be able to know that T2, T4 and T5 are
already running.
Thanks,
Darian | |
Share:
|
On 7 Sep 2004 06:42:59 -0700, Darian wrote: Is there a way to find all the thread names that are running in a project?
For example, if I have 5 threads T1, T2, T3, T4, T5...and T2, T4, and T5 are running...I want to be able to know that T2, T4 and T5 are already running.
Thanks, Darian
You can use the System.Diagnostics.Process class's Threads member to access
your process threads - You won't be able to get the name from there
though...
--
Tom Shelton [MVP] | | |
Darian,
Do it like most people, just set a boolean array for it and set that to true
something like
private threadrunnunning(5) as boolean
threadrunning(1) = true
if threadrunning(1) = true then
That gives you in my opinion real much more performance than checking it
with any other method.
Just my thought,
Cor
"Darian" Is there a way to find all the thread names that are running in a project?
For example, if I have 5 threads T1, T2, T3, T4, T5...and T2, T4, and T5 are running...I want to be able to know that T2, T4 and T5 are already running.
Thanks, Darian | | |
You may use Process.Threads property. On the returned collection, use the
ThreadState property on individual elements to filter out running threads
(for ThreadState.Running).
Hope this is what you are looking for.
"Darian" <da***********@lmicorporation.com> wrote in message
news:fa*************************@posting.google.co m...
Is there a way to find all the thread names that are running in a
project?
For example, if I have 5 threads T1, T2, T3, T4, T5...and T2, T4, and
T5 are running...I want to be able to know that T2, T4 and T5 are
already running.
Thanks,
Darian | | |
* Tom Shelton <to*@YOUKNOWTHEDRILLmtogden.com> scripsit: Is there a way to find all the thread names that are running in a project?
For example, if I have 5 threads T1, T2, T3, T4, T5...and T2, T4, and T5 are running...I want to be able to know that T2, T4 and T5 are already running.
You can use the System.Diagnostics.Process class's Threads member to access your process threads - You won't be able to get the name from there though...
This property will give you the number of unmanaged threads, not the
managed threads. So there might be some differences in the results.
--
M S Herfried K. Wagner
M V P <URL:http://dotnet.mvps.org/>
V B <URL:http://dotnet.mvps.org/dotnet/faqs/> | | |
In article <2q************@uni-berlin.de>, Herfried K. Wagner [MVP] wrote: * Tom Shelton <to*@YOUKNOWTHEDRILLmtogden.com> scripsit: Is there a way to find all the thread names that are running in a project?
For example, if I have 5 threads T1, T2, T3, T4, T5...and T2, T4, and T5 are running...I want to be able to know that T2, T4 and T5 are already running.
You can use the System.Diagnostics.Process class's Threads member to access your process threads - You won't be able to get the name from there though...
This property will give you the number of unmanaged threads, not the managed threads. So there might be some differences in the results.
Really... I don't see that in the docs. Are you sure about this? I
guess you learn something new every day :)
--
Tom Shelton [MVP] | | |
* Tom Shelton <to*@YOUKNOWTHEDRILLmtogden.com> scripsit: In article <2q************@uni-berlin.de>, Herfried K. Wagner [MVP] wrote: * Tom Shelton <to*@YOUKNOWTHEDRILLmtogden.com> scripsit: Is there a way to find all the thread names that are running in a project?
For example, if I have 5 threads T1, T2, T3, T4, T5...and T2, T4, and T5 are running...I want to be able to know that T2, T4 and T5 are already running.
You can use the System.Diagnostics.Process class's Threads member to access your process threads - You won't be able to get the name from there though...
This property will give you the number of unmanaged threads, not the managed threads. So there might be some differences in the results.
Really... I don't see that in the docs. Are you sure about this? I guess you learn something new every day :)
I never checked it, but I assume that this can be the case ("operating
system threads"):
"
An array of type 'ProcessThread' representing the operating system threads
currently running in the associated process.
"
When starting a new thread using PInvoke inside your .NET application,
then this thread would be listed in 'Threads', but it would not be a
managed thread. If you are using 3rd party components, another
component may start an unmanaged thread.
--
M S Herfried K. Wagner
M V P <URL:http://dotnet.mvps.org/>
V B <URL:http://dotnet.mvps.org/dotnet/faqs/> | | |
In article <2q************@uni-berlin.de>, Herfried K. Wagner [MVP] wrote: * Tom Shelton <to*@YOUKNOWTHEDRILLmtogden.com> scripsit: In article <2q************@uni-berlin.de>, Herfried K. Wagner [MVP] wrote: * Tom Shelton <to*@YOUKNOWTHEDRILLmtogden.com> scripsit: > Is there a way to find all the thread names that are running in a > project? > > For example, if I have 5 threads T1, T2, T3, T4, T5...and T2, T4, and > T5 are running...I want to be able to know that T2, T4 and T5 are > already running.
You can use the System.Diagnostics.Process class's Threads member to access your process threads - You won't be able to get the name from there though...
This property will give you the number of unmanaged threads, not the managed threads. So there might be some differences in the results.
Really... I don't see that in the docs. Are you sure about this? I guess you learn something new every day :)
I never checked it, but I assume that this can be the case ("operating system threads"):
" An array of type 'ProcessThread' representing the operating system threads currently running in the associated process. "
When starting a new thread using PInvoke inside your .NET application, then this thread would be listed in 'Threads', but it would not be a managed thread. If you are using 3rd party components, another component may start an unmanaged thread.
I just little test of this... Just to find out. Here is the C# code:
using System;
using System.Runtime.InteropServices;
using System.Threading;
using System.Diagnostics;
namespace ConsoleApplication17
{
/// <summary>
/// Summary description for Class1.
/// </summary>
class Class1
{
/// <summary>
/// The main entry point for the application.
/// </summary>
[STAThread]
static void Main(string[] args)
{
Process p = Process.GetCurrentProcess ();
Console.WriteLine ("Intitial: " + p.Threads.Count);
Thread[] threads = new Thread[10];
for (int i = 0; i < threads.Length; i++)
{
threads[i] = new Thread (new ThreadStart
(Class1.ThreadFunc));
threads[i].Start ();
}
Thread.Sleep (2000);
Console.WriteLine ("===============================");
p = Process.GetCurrentProcess ();
Console.WriteLine ("New: " + p.Threads.Count);
foreach (ProcessThread pthread in p.Threads)
{
Console.WriteLine (pthread.Id);
}
}
static void ThreadFunc()
{
Console.WriteLine ("Child: " + Class1.GetCurrentThreadId
());
Thread.Sleep (new TimeSpan (0, 0, 0, 20, 0));
}
[DllImport ("kernel32")]
static extern IntPtr GetCurrentThreadId ();
}
}
It does indeed include the managed threads... Though, I did find out
that it doen't update dyanmically. The process instance is a snapshot
of the current state of the application, so if threads are started
after you get the instance, then the will not show up in the Threads
collection.
--
Tom Shelton [MVP] | | |
Tom,
* Tom Shelton <to*@YOUKNOWTHEDRILLmtogden.com> scripsit: >> Is there a way to find all the thread names that are running in a >> project? >> >> For example, if I have 5 threads T1, T2, T3, T4, T5...and T2, T4, and >> T5 are running...I want to be able to know that T2, T4 and T5 are >> already running. > > You can use the System.Diagnostics.Process class's Threads member to access > your process threads - You won't be able to get the name from there > though...
This property will give you the number of unmanaged threads, not the managed threads. So there might be some differences in the results.
Really... I don't see that in the docs. Are you sure about this? I guess you learn something new every day :)
I never checked it, but I assume that this can be the case ("operating system threads"):
" An array of type 'ProcessThread' representing the operating system threads currently running in the associated process. "
When starting a new thread using PInvoke inside your .NET application, then this thread would be listed in 'Threads', but it would not be a managed thread. If you are using 3rd party components, another component may start an unmanaged thread.
I just little test of this... Just to find out. Here is the C# code:
using System; using System.Runtime.InteropServices; using System.Threading; using System.Diagnostics;
namespace ConsoleApplication17 { /// <summary> /// Summary description for Class1. /// </summary> class Class1 { /// <summary> /// The main entry point for the application. /// </summary> [STAThread] static void Main(string[] args) { Process p = Process.GetCurrentProcess ();
Console.WriteLine ("Intitial: " + p.Threads.Count); Thread[] threads = new Thread[10]; for (int i = 0; i < threads.Length; i++) { threads[i] = new Thread (new ThreadStart (Class1.ThreadFunc)); threads[i].Start (); }
Thread.Sleep (2000); Console.WriteLine ("===============================");
p = Process.GetCurrentProcess (); Console.WriteLine ("New: " + p.Threads.Count); foreach (ProcessThread pthread in p.Threads) { Console.WriteLine (pthread.Id); } }
static void ThreadFunc() { Console.WriteLine ("Child: " + Class1.GetCurrentThreadId ()); Thread.Sleep (new TimeSpan (0, 0, 0, 20, 0)); }
[DllImport ("kernel32")] static extern IntPtr GetCurrentThreadId (); } }
It does indeed include the managed threads... Though, I did find out that it doen't update dyanmically. The process instance is a snapshot of the current state of the application, so if threads are started after you get the instance, then the will not show up in the Threads collection.
Thanks for investigating. I agree that managed threads are listed in
'Threads', but there is neither a guarantee that all threads listed in
'Threads' have been started in your code (that means, that they are
"managed" threads), nor is, as you say, 'Threads' an active snapshot of
the threads belonging to the process.
Consequently I would set up my own datastructure and keep references to
the threads that are alive there.
--
M S Herfried K. Wagner
M V P <URL:http://dotnet.mvps.org/>
V B <URL:http://dotnet.mvps.org/dotnet/faqs/> | | |
On 08 Sep 2004 01:59:58 +0200, Herfried K. Wagner [MVP] wrote: Tom,
* Tom Shelton <to*@YOUKNOWTHEDRILLmtogden.com> scripsit:>>> Is there a way to find all the thread names that are running in a >>> project? >>> >>> For example, if I have 5 threads T1, T2, T3, T4, T5...and T2, T4, and >>> T5 are running...I want to be able to know that T2, T4 and T5 are >>> already running. >> >> You can use the System.Diagnostics.Process class's Threads member to access >> your process threads - You won't be able to get the name from there >> though... > > This property will give you the number of unmanaged threads, not the > managed threads. So there might be some differences in the results. >
Really... I don't see that in the docs. Are you sure about this? I guess you learn something new every day :)
I never checked it, but I assume that this can be the case ("operating system threads"):
" An array of type 'ProcessThread' representing the operating system threads currently running in the associated process. "
When starting a new thread using PInvoke inside your .NET application, then this thread would be listed in 'Threads', but it would not be a managed thread. If you are using 3rd party components, another component may start an unmanaged thread.
I just little test of this... Just to find out. Here is the C# code:
using System; using System.Runtime.InteropServices; using System.Threading; using System.Diagnostics;
namespace ConsoleApplication17 { /// <summary> /// Summary description for Class1. /// </summary> class Class1 { /// <summary> /// The main entry point for the application. /// </summary> [STAThread] static void Main(string[] args) { Process p = Process.GetCurrentProcess ();
Console.WriteLine ("Intitial: " + p.Threads.Count); Thread[] threads = new Thread[10]; for (int i = 0; i < threads.Length; i++) { threads[i] = new Thread (new ThreadStart (Class1.ThreadFunc)); threads[i].Start (); }
Thread.Sleep (2000); Console.WriteLine ("===============================");
p = Process.GetCurrentProcess (); Console.WriteLine ("New: " + p.Threads.Count); foreach (ProcessThread pthread in p.Threads) { Console.WriteLine (pthread.Id); } }
static void ThreadFunc() { Console.WriteLine ("Child: " + Class1.GetCurrentThreadId ()); Thread.Sleep (new TimeSpan (0, 0, 0, 20, 0)); }
[DllImport ("kernel32")] static extern IntPtr GetCurrentThreadId (); } }
It does indeed include the managed threads... Though, I did find out that it doen't update dyanmically. The process instance is a snapshot of the current state of the application, so if threads are started after you get the instance, then the will not show up in the Threads collection.
Thanks for investigating. I agree that managed threads are listed in 'Threads', but there is neither a guarantee that all threads listed in 'Threads' have been started in your code (that means, that they are "managed" threads), nor is, as you say, 'Threads' an active snapshot of the threads belonging to the process.
Consequently I would set up my own datastructure and keep references to the threads that are alive there.
I agree... I would probably use an arraylist or array (depending) to
actually keep a reference to the thread. It was just something that struck
me when I first answered.
--
Tom Shelton [MVP] | | |
Darian,
In addition to the other comments.
Is there a special relationship between your name of the thread & the
thread?
If there is I would store each thread instance in its own variable.
Dim T1, T2, T3, T4, T5 As Thread
When I created the thread I would set the above thread variable, when I
terminated the thread I would clear the above variable.
If there is no special relationship, I would probably use a HashTable.
Of course this assumes you know when the threads start & stop.
Hope this helps
Jay
"Darian" <da***********@lmicorporation.com> wrote in message
news:fa*************************@posting.google.co m... Is there a way to find all the thread names that are running in a project?
For example, if I have 5 threads T1, T2, T3, T4, T5...and T2, T4, and T5 are running...I want to be able to know that T2, T4 and T5 are already running.
Thanks, Darian | | This discussion thread is closed Replies have been disabled for this discussion. Similar topics
1 post
views
Thread by Sims |
last post: by
|
reply
views
Thread by Helge Jensen |
last post: by
|
4 posts
views
Thread by jbesr1230 |
last post: by
|
5 posts
views
Thread by Kovan Akrei |
last post: by
|
3 posts
views
Thread by Bennett Haselton |
last post: by
|
11 posts
views
Thread by Claude Henchoz |
last post: by
|
2 posts
views
Thread by Juuso Hukkanen |
last post: by
|
reply
views
Thread by Ben Fidge |
last post: by
|
3 posts
views
Thread by Johnny Jörgensen |
last post: by
| | | | | | | | | | |