- PR -

ThreadPoolを使ったプログラムについて

1
投稿者投稿内容
ゆいたん
ベテラン
会議室デビュー日: 2004/08/26
投稿数: 91
投稿日時: 2006-01-16 16:05
開発環境 C# 2005

ThreadPoolを使ったプログラムをヘルプやWebコンテンツを参考に
作成しています。
下記のコードで、マルチスレッドでは動いているようなのですが、
疑問点があるので教えてください。

1.while (workerTheadCount != maxThreadCount)をスレッドに投げた
処理が全部終わったという判断に使っていますが、正しいのでしょうか?

2.スレッドのMax=8に対して、99個のタスクを投げています。
 最初、8個がマルチスレッドで動き出し、91個がキューに
 入ると思うのですが、このキューに入っている数を取得することは
 可能でしょうか。

コード:
    class Program
    {

        static void Main(string[] args)
        {

            int maxThreadCount = 8;
            ThreadPool.SetMaxThreads(maxThreadCount, maxThreadCount);
            
            for (int i = 1; i < 100; i++)
            {
                ThreadPool.QueueUserWorkItem(new WaitCallback(ThreadMethod), i); 
            }
            
            int workerTheadCount = 0;
            int completionPortThread = 0;

            Console.Write("Pooling:{0}\\n",System.DateTime.Now);

            while (workerTheadCount != maxThreadCount)
            {
                ThreadPool.GetAvailableThreads(out workerTheadCount,out completionPortThread);
                Thread.Sleep(1000);
            }

            Console.Write("Complite:{0}\\n",System.DateTime.Now); 

            Console.ReadLine(); 

        }

        private static void ThreadMethod(object state) 
        {
            
            Ping ping = new Ping();
            
            String hostName = "192.168.1." + state.ToString();
            int timeout = 1000;
            
            PingReply pingReply = ping.Send(hostName, timeout);

            Console.Write("{0}:{1}\\n", hostName,pingReply.Status); 
        } 

    }




この練習ソース自体がぜんぜんだめかもしれませんが、
何かお気づきの点がありましたらそれも指摘していただければと思います。
よろしくお願いいたします。

以上
1

スキルアップ/キャリアアップ(JOB@IT)