Trang 1 trên tổng số 2 12 Cuối cùngCuối cùng
Từ 1 tới 10 trên tổng số 16 kết quả

Đề tài: Làm sao để nhận biết các thread đã kết thúc hay chưa?

  1. #1
    Ngày gia nhập
    04 2011
    Bài viết
    24

    Mặc định Làm sao để nhận biết các thread đã kết thúc hay chưa?

    Kính chào tât cả các bạn! Mình có một vấn đề sau xin được giúp đỡ.

    Mình code như này

    Code:
    private z = 100; 
    private k = 0;
    Public void P()
     {
       int i = k;
       k++;
       if (i<z)
         {
            Console.Write(i + " ");
            P();
         }
     }
    
    Public Form_Load()
     {
         thread t = new thread[5];
         for (int i =0;i<5;i++)
           {
               t[i] = new thread(new threadstart(P));
               t[i].Isbackground = true;
               t[i].start();
           }
    
         //Thực hiện công việc tiếp theo sau khi thread trên hoàn thành
     }
    Vấn đề ở đây là minh muốn sau khi khởi tạo 5 thread trên thì làm sao mình biết nó đã kết thúc hoàn toàn để có thể thực hiện công việc tiếp sau (Có nghĩa là mình muốn thực hiện một công việc nào đó sau khi 5 thread trên đã hoàn toàn kết thúc)

    Các bác xem giúp và xin chỉ giáo. Rất cám ơn !

  2. #2
    Ngày gia nhập
    05 2011
    Bài viết
    299

    trong thread có thuộc tính threadstate cho biết trạng thái hiện tại của thread
    Programming tutorials and source code examples

    Trong nhà không vợ không con
    Uống bia gặm thịt sao ngon thế này
    Nhậu nhẹt không bị la rầy
    Một tuần ta cứ bảy ngày " nâng ly "....

  3. #3
    Ngày gia nhập
    03 2011
    Bài viết
    67

    C++ Code:
    1. for ( int i = 0; i < 5 ;i++ )
    2. {
    3.   if( !t[i].IsAlive )
    4.    {
    5. //do something
    6.    }
    7. }
    An Incompetent

  4. #4
    Ngày gia nhập
    04 2011
    Bài viết
    24

    ý mình nói là sau khi các thread đó đã hoàn toàn kết thúc hết, kế đến mình sẽ thực hiện công việc tiếp theo, bạn code jay mình k hiểu lắm.! xin vui lòng nói rõ hơn được k?

  5. #5
    Ngày gia nhập
    03 2011
    Bài viết
    67

    Trích dẫn Nguyên bản được gửi bởi dlover Xem bài viết
    ý mình nói là sau khi các thread đó đã hoàn toàn kết thúc hết, kế đến mình sẽ thực hiện công việc tiếp theo, bạn code jay mình k hiểu lắm.! xin vui lòng nói rõ hơn được k?
    Để chắc chắn 5 thread của bạn đã kết thúc hay chưa thì bạn làm thế này
    C++ Code:
    1.      for ( int i = 0; i < 5 ;i++ )
    2.      {
    3.         while ( t[i].IsAlive )
    4.            Thread.Sleep(10); //tránh bị đứng chương trình
    5.      }
    6. //Ở đoạn dưới này thì cả 5 thread đã kết thúc
    7. //Xử lí tiếp ở dưới
    Tuy nhiên để tránh main thread bị đứng thì bạn nên đặt code trên trong một thread khác , hoặc đặt thêm khối try/ catch và đặt time out nữa cho chắc
    An Incompetent

  6. #6
    Ngày gia nhập
    04 2011
    Bài viết
    24

    Mặc định Làm sao để nhận biết các thread đã kết thúc hay chưa?

    Code:
    using System;
    using System.Collections.Generic;
    using System.Text;
    using System.Threading;
    
    namespace ConsoleApplication2
    {
        class Program
        {
    
            public class ThreadPoolExample
            {
    
                static void Main()
                {
                    Thread[] t = new Thread[5];
                    for (int i = 0; i < 5; i++)
                    {
                        t[i] = new Thread(new ThreadStart(P));
                        t[i].IsBackground = true;
                        t[i].Start();
                    }
                    Console.Write("kkkkkksdfj lskdfjsd fsd fsd fsd");
                    Console.ReadKey();
                }
                public static int z = 10000;
                public static int k = 0;
                public static void P()
                {
                    int i = k;
                    k++;
                    if (i < z)
                    {
                        Console.Write(i + " ");
                        P();
                    }
                }
            }
        }
    }
    không được bạn ơi các thread chưa chạy xong thì nó đã thực hiện câu lệnh Console.Write("kkkkkksdfj lskdfjsd fsd fsd fsd"); một lượt luôn rồi, cái mình muốn là in ra câu thông báo đó sau khi các thread đó đã hoàn tất chứ không phải là trong khi thread đang chạy chưa xong.

    Bạn vui lòng giúp đỡ cho

  7. #7
    Ngày gia nhập
    03 2011
    Bài viết
    67

    Visual C++ Code:
    1. using System;
    2. using System.Collections.Generic;
    3. using System.Text;
    4. using System.Threading;
    5.  
    6. namespace ConsoleApplication2
    7. {
    8.     class Program
    9.     {
    10.  
    11.         public class ThreadPoolExample
    12.         {
    13.  
    14.             static void Main()
    15.             {
    16.                 Thread[] t = new Thread[5];
    17.                 for (int i = 0; i < 5; i++)
    18.                 {
    19.                     t[i] = new Thread(new ThreadStart(P));
    20.                     t[i].IsBackground = true;
    21.                     t[i].Start();
    22.                 }
    23. /////////////////////// waiting for all threads  complete....
    24.                 for (int i = 0; i < 5; i++)
    25.                 {
    26.                     while (t[i].IsAlive)
    27.                         Thread.Sleep(10);
    28.                 }
    29. ///////////////////////
    30.                 Console.Write("kkkkkksdfj lskdfjsd fsd fsd fsd");
    31.                 Console.ReadKey();
    32.             }
    33.             public static int z = 10000;
    34.             public static int k = 0;
    35.             public static void P()
    36.             {
    37.                 int i = k;
    38.                 k++;
    39.                 if (i < z)
    40.                 {
    41.                     Console.Write(i + " ");
    42.                     P();
    43.                 }
    44.             }
    45.         }
    46.     }
    47. }
    Bạn đã đọc comment trước của mình chưa
    An Incompetent

  8. #8
    Ngày gia nhập
    04 2011
    Bài viết
    24

    Thank bạn đã comment cho mình rất nhanh.

    Mình đã có đọc comment trước của bạn, kết quả là bị treo sau đó mình bỏ nó vô thread khác thì lại không được nó vẫn chạy đồng thời với các thread kia bạn ơi.

    Code:
    using System;
    using System.Collections.Generic;
    using System.Text;
    using System.Threading;
    
    namespace ConsoleApplication2
    {
        class Program
        {
    
            public class ThreadPoolExample
            {
    
                static void Main()
                {
                     t = new Thread[5];
                    for (int i = 0; i < 5; i++)
                    {
                        t[i] = new Thread(new ThreadStart(P));
                        t[i].IsBackground = true;
                        t[i].Start();
                    }
    
                    Thread n = new Thread(new ThreadStart(h));
                    n.Start();
    
                    Console.Write("Đã hoàn tất");
                    Console.ReadKey();
                }
                public static int z = 1000;
                public static int k = 0;
                public static Thread[] t;
                public static void h()
                {
                    for (int i = 0; i < 5; i++)
                    {
                        while (t[i].IsAlive)
                            Thread.Sleep(10);
                    }
                }
                public static void P()
                {
                    int i = k;
                    k++;
                    if (i < z)
                    {
                        Console.Write(i + " ");
                        P();
                    }
                }
            }
        }
    }

  9. #9
    Ngày gia nhập
    03 2011
    Bài viết
    67

    Mình đặt vào main thread vẫn ko thấy bị treo bạn ạ, với lại bị treo làm sao đc khi mỗi lần lặp mình cho sleep 10 ms nhỉ
    Bạn copy code trên của mình chạy thử mà xem !! Nhìn code bạn sửa là thấy sai một số lỗi rồi
    An Incompetent

  10. #10
    Ngày gia nhập
    04 2011
    Bài viết
    24

    Code của mình chạy mà, ah bi giờ thì hết treo rồi nhưng nó vẫn in câu thông báo một lượt với các thread đang chạy bạn ơi, bann copy code của mình chạy thử xem.

Các đề tài tương tự

  1. Trả lời: 0
    Bài viết cuối: 16-02-2012, 10:37 PM
  2. Kỹ thuật C++ Cách quản lý các thread con với số lượng không biết trước ?
    Gửi bởi doicanhden trong diễn đàn Thắc mắc lập trình C/C++/C++0x
    Trả lời: 1
    Bài viết cuối: 07-07-2011, 10:00 PM
  3. Multithread trong VC++6: Không kết thúc thread khi đã hoàn hành?
    Gửi bởi hvnth_88 trong diễn đàn Thắc mắc lập trình Visual C++
    Trả lời: 3
    Bài viết cuối: 12-05-2011, 10:27 AM
  4. Làm sao nhận biết được 1 thread đang hoạt động và kết thúc.
    Gửi bởi Digit Life trong diễn đàn Thắc mắc lập trình C#
    Trả lời: 2
    Bài viết cuối: 12-01-2011, 02:56 PM
  5. Lập trình VC++ MFC | Cách kết thúc 1 thread bên ngoài thread?
    Gửi bởi kUn_shOck trong diễn đàn Thắc mắc lập trình Visual C++
    Trả lời: 11
    Bài viết cuối: 20-12-2010, 01:22 AM

Quyền hạn của bạn

  • Bạn không thể gửi đề tài mới
  • Bạn không thể gửi bài trả lời
  • Bạn không thể gửi các đính kèm
  • Bạn không thể chỉnh sửa bài viết của bạn