Nhận biết khi nào một tiểu trình kết thúc

Một phần của tài liệu Lập trình mạng ứng dụng (Trang 100 - 101)

Để kiểm tra một tiểu trình đã kết thúc hay chưa là kiểm tra thuộc tính Thread.IsAlive. Thuộc tính này trả về true nếu tiểu trình đã được khởi chạy nhưng chưa kết thúc hay bị hủy.

Thông thường,cần một tiểu trình đểđợi một tiểu trình khác hoàn tất việc xử lý của nó. Thay vì kiểm tra thuộc tính IsAlive trong một vòng lặp, có thể sử dụng phương thức Thread.Join. Phương thức này khiến tiểu trình đang gọi dừng lại (block) cho đến khi tiểu trình được tham chiếu kết thúc.

Có thể tùy chọn chỉđịnh một khoảng thời gian (giá trị int hay TimeSpan) mà sau khoảng thời gian này, Join sẽ hết hiệu lực và quá trình thực thi của tiểu trình đang gọi sẽ phục hồi lại. Nếu chỉ định một giá trị time-out, Join trả về true nếu tiểu trình đã kết thúc, và false nếu Join đã hết hiệu lực.

Ví dụ: Ví dụ sau thực thi một tiểu trình thứ hai và rồi gọi Join để đợi tiểu trình thứ hai kết thúc. Vì tiểu trình thứ hai mất 5 giây để thực thi, nhưng phương thức Join chỉđịnh giá trị time-out là 3 giây, nên Join sẽ luôn hết hiệu lực và ví dụ này sẽ hiển thị một thông báo ra cửa sổ Console.

Chương trình ThreadFinishExample

using System;

using System.Threading;

public class ThreadFinishExample {

private static void DisplayMessage() {

// Hiển thị một thông báo ra cửa sổ Console 5 lần. for (int count = 0; count < 5; count++)

{ Console.WriteLine("{0} : Second thread", DateTime.Now.ToString("HH:mm:ss.ffff")); // Nghỉ 1 giây.

Thread.Sleep(1000); }

}

public static void Main() {

ThreadStart method = new ThreadStart(DisplayMessage); // Tạo một đối tượng Thread và truyền thể hiện ủy nhiệm // ThreadStart cho phương thức khởi dựng của nó. Thread thread = new Thread(method);

Console.WriteLine("{0} : Starting second thread.", DateTime.Now.ToString("HH:mm:ss.ffff")); // Khởi chạy tiểu trình thứ hai.

thread.Start();

// Dừng cho đến khi tiểu trình thứ hai kết thúc, hoặc Join hết hiệu lực sau 3 giây.

if (!thread.Join(3000))

{ Console.WriteLine("{0} : Join timed out !!", DateTime.Now.ToString("HH:mm:ss.ffff")); }

// Nhấn Enter để kết thúc.

Console.WriteLine("Main method complete. Press Enter."); Console.ReadLine();

} }

Một phần của tài liệu Lập trình mạng ứng dụng (Trang 100 - 101)

Tải bản đầy đủ (PDF)

(141 trang)