Các giải pháp lập trình CSharp- P14
Số trang: 10
Loại file: pdf
Dung lượng: 2.61 MB
Lượt xem: 12
Lượt tải: 0
Xem trước 2 trang đầu tiên của tài liệu này:
Thông tin tài liệu:
Các giải pháp lập trình CSharp- P14: Các giải pháp lập trình C# khảo sát chiều rộng của thư viện lớp .NET Framework và cung cấp giải pháp cụ thể cho các vấn đềthường gặp. Mỗi giải pháp được trình bày theo dạng “vấn đề/giải pháp” một cách ngắn gọn và kèm theo là các ví dụ mẫu.
Nội dung trích xuất từ tài liệu:
Các giải pháp lập trình CSharp- P14 131 Chương 4: Tiểu trình, tiến trình, và sự đồng bộ TimerCallback handler = new TimerCallback(TimerHandler); // Tạo một đối tượng trạng thái, đối tượng này sẽ được // truyền cho phương thức TimerHandler. // Trong trường hợp này, một thông báo sẽ được hiển thị. string state = Timer expired.; Console.WriteLine({0} : Creating Timer., DateTime.Now.ToString(HH:mm:ss.ffff)); // Tạo một Timer, phát sinh lần đầu tiên sau hai giây // và sau đó là mỗi giây. using (Timer timer = new Timer(handler, state, 2000, 1000)) { int period; // Đọc thời khoảng mới từ Console cho đến khi // người dùng nhập 0. Các giá trị không hợp lệ // sẽ sử dụng giá trị mặc định là 0 (dừng ví dụ). do { try { period = Int32.Parse(Console.ReadLine()); } catch { period = 0; } // Thay đổi Timer với thời khoảng mới. if (period > 0) timer.Change(0, period); } while (period > 0); } // Nhấn Enter để kết thúc. Console.WriteLine(Main method complete. Press Enter.); Console.ReadLine(); }} 132 Chương 4: Tiểu trình, tiến trình, và sự đồng bộMặc dù Timer thường được sử dụng để gọi thực thi các phương thức ở những thời khoảng,nhưng nó cũng cung cấp cách thức để thực thi một phương thức ở một thời điểm xác định.Bạn cần phải tính toán khoảng thời gian từ thời điểm hiện tại đến thời điểm cần thực thi. Ví dụdưới đây sẽ thực hiện điều này:public static void RunAt(DateTime execTime) { // Tính khoảng thời gian từ thời điểm hiện tại // đến thời điểm cần thực thi. TimeSpan waitTime = execTime - DateTime.Now; if (waitTime < new TimeSpan(0)) waitTime = new TimeSpan(0); // Tạo một thể hiện ủy nhiệm TimerCallback mới // tham chiếu đến phương thức tĩnh TimerHandler. // TimerHandler sẽ được gọi khi Timer hết hiệu lực. TimerCallback handler = new TimerCallback(TimerHandler); // Tạo một Timer chỉ phát sinh một lần tại thời điểm // được chỉ định. Chỉ định thời khoảng thứ hai là -1 // để ngăn Timer thực thi lặp lại phương thức. new Timer(handler, null, waitTime, new TimeSpan(-1));}4. Thực thi phương thức bằng cách ra hiệu đối tượng WaitHandle Bạn muốn thực thi một hay nhiều phương thức một cách tự động khi một đối tượng dẫn xuất từ lớp System.Threading.WaitHandle đi vào trạng thái signaled. Tạo một thể hiện ủy nhiệm System.Threading.WaitOrTimerCallback tham chiếu đến phương thức cần thực thi. Sau đó, đăng ký thể hiện ủy nhiệm và đối tượng WaitHandle với thread-pool bằng phương thức tĩnh ThreadPool. RegisterWaitForSingleObject.Bạn có thể sử dụng các lớp dẫn xuất từ WaitHandle (đã được thảo luận trong mục 4.2) để gọithực thi một phương thức. Bằng phương thức RegisterWaitForSingleObject của lớpThreadPool, bạn có thể đăng ký thể hiện ủy nhiệm WaitOrTimerCallback với thread-pool khimột đối tượng dẫn xuất từ WaitHandle đi vào trạng thái signaled. Bạn có thể cấu hình thread-pool để thực thi phương thức chỉ một lần hay tự động đăng ký lại phương thức mỗi khiWaitHandle đi vào trạng thái signaled. Nếu WaitHandle đã ở trạng thái signaled khi bạn gọiRegisterWaitForSingleObject, phương thức sẽ thực thi ngay lập tức. Phương thức 133 Chương 4: Tiểu trình, tiến trình, và sự đồng bộUnregister của đối tượng System.Threading.RegisteredWaitHandle (được trả về bởi phươngthức RegisterWaitForSingleObject) được sử dụng để hủy bỏ việc đăng ký.Lớp thường được dùng làm bộ kích hoạt là AutoResetEvent, nó sẽ tự động chuyển sang trạngthái unsignaled sau khi ở trạng thái signaled. Tuy nhiên, bạn cũng có thể thay đổi trạng tháisignaled theo ý muốn bằng lớp ManualResetEvent hay Mutex. Ví dụ dưới đây trình bày cách sửdụng một AutoResetEvent để kích hoạt thực thi một phương thức có tên là EventHandler.using System;using System.Threading;public class EventExecutionExample { // Phương thức sẽ được thực thi khi AutoResetEvent đi vào trạng // thái signaled hoặc quá trình đợi hết thời gian (time-out). private static void EventHandler(object state, bool timedout) { // Hiển thị thông báo thích hợp ra cửa sổ Console // tùy vào quá trình đợi đã hết thời gian hay // AutoResetEvent đã ở trạng thái signaled. if (timedout) { Console.WriteLine({0} : Wait timed out., DateTime.Now.ToString(HH:mm:ss.ffff)); } else { ...
Nội dung trích xuất từ tài liệu:
Các giải pháp lập trình CSharp- P14 131 Chương 4: Tiểu trình, tiến trình, và sự đồng bộ TimerCallback handler = new TimerCallback(TimerHandler); // Tạo một đối tượng trạng thái, đối tượng này sẽ được // truyền cho phương thức TimerHandler. // Trong trường hợp này, một thông báo sẽ được hiển thị. string state = Timer expired.; Console.WriteLine({0} : Creating Timer., DateTime.Now.ToString(HH:mm:ss.ffff)); // Tạo một Timer, phát sinh lần đầu tiên sau hai giây // và sau đó là mỗi giây. using (Timer timer = new Timer(handler, state, 2000, 1000)) { int period; // Đọc thời khoảng mới từ Console cho đến khi // người dùng nhập 0. Các giá trị không hợp lệ // sẽ sử dụng giá trị mặc định là 0 (dừng ví dụ). do { try { period = Int32.Parse(Console.ReadLine()); } catch { period = 0; } // Thay đổi Timer với thời khoảng mới. if (period > 0) timer.Change(0, period); } while (period > 0); } // Nhấn Enter để kết thúc. Console.WriteLine(Main method complete. Press Enter.); Console.ReadLine(); }} 132 Chương 4: Tiểu trình, tiến trình, và sự đồng bộMặc dù Timer thường được sử dụng để gọi thực thi các phương thức ở những thời khoảng,nhưng nó cũng cung cấp cách thức để thực thi một phương thức ở một thời điểm xác định.Bạn cần phải tính toán khoảng thời gian từ thời điểm hiện tại đến thời điểm cần thực thi. Ví dụdưới đây sẽ thực hiện điều này:public static void RunAt(DateTime execTime) { // Tính khoảng thời gian từ thời điểm hiện tại // đến thời điểm cần thực thi. TimeSpan waitTime = execTime - DateTime.Now; if (waitTime < new TimeSpan(0)) waitTime = new TimeSpan(0); // Tạo một thể hiện ủy nhiệm TimerCallback mới // tham chiếu đến phương thức tĩnh TimerHandler. // TimerHandler sẽ được gọi khi Timer hết hiệu lực. TimerCallback handler = new TimerCallback(TimerHandler); // Tạo một Timer chỉ phát sinh một lần tại thời điểm // được chỉ định. Chỉ định thời khoảng thứ hai là -1 // để ngăn Timer thực thi lặp lại phương thức. new Timer(handler, null, waitTime, new TimeSpan(-1));}4. Thực thi phương thức bằng cách ra hiệu đối tượng WaitHandle Bạn muốn thực thi một hay nhiều phương thức một cách tự động khi một đối tượng dẫn xuất từ lớp System.Threading.WaitHandle đi vào trạng thái signaled. Tạo một thể hiện ủy nhiệm System.Threading.WaitOrTimerCallback tham chiếu đến phương thức cần thực thi. Sau đó, đăng ký thể hiện ủy nhiệm và đối tượng WaitHandle với thread-pool bằng phương thức tĩnh ThreadPool. RegisterWaitForSingleObject.Bạn có thể sử dụng các lớp dẫn xuất từ WaitHandle (đã được thảo luận trong mục 4.2) để gọithực thi một phương thức. Bằng phương thức RegisterWaitForSingleObject của lớpThreadPool, bạn có thể đăng ký thể hiện ủy nhiệm WaitOrTimerCallback với thread-pool khimột đối tượng dẫn xuất từ WaitHandle đi vào trạng thái signaled. Bạn có thể cấu hình thread-pool để thực thi phương thức chỉ một lần hay tự động đăng ký lại phương thức mỗi khiWaitHandle đi vào trạng thái signaled. Nếu WaitHandle đã ở trạng thái signaled khi bạn gọiRegisterWaitForSingleObject, phương thức sẽ thực thi ngay lập tức. Phương thức 133 Chương 4: Tiểu trình, tiến trình, và sự đồng bộUnregister của đối tượng System.Threading.RegisteredWaitHandle (được trả về bởi phươngthức RegisterWaitForSingleObject) được sử dụng để hủy bỏ việc đăng ký.Lớp thường được dùng làm bộ kích hoạt là AutoResetEvent, nó sẽ tự động chuyển sang trạngthái unsignaled sau khi ở trạng thái signaled. Tuy nhiên, bạn cũng có thể thay đổi trạng tháisignaled theo ý muốn bằng lớp ManualResetEvent hay Mutex. Ví dụ dưới đây trình bày cách sửdụng một AutoResetEvent để kích hoạt thực thi một phương thức có tên là EventHandler.using System;using System.Threading;public class EventExecutionExample { // Phương thức sẽ được thực thi khi AutoResetEvent đi vào trạng // thái signaled hoặc quá trình đợi hết thời gian (time-out). private static void EventHandler(object state, bool timedout) { // Hiển thị thông báo thích hợp ra cửa sổ Console // tùy vào quá trình đợi đã hết thời gian hay // AutoResetEvent đã ở trạng thái signaled. if (timedout) { Console.WriteLine({0} : Wait timed out., DateTime.Now.ToString(HH:mm:ss.ffff)); } else { ...
Tìm kiếm theo từ khóa liên quan:
kinh nghiệm lập trình CSharp mẹo lập trình ngôn ngữ lập trình C giáo trình lập trình CSharp lập trình java lập trình căn bản CSharpTài liệu liên quan:
-
Thủ thuật giúp giải phóng dung lượng ổ cứng
4 trang 217 0 0 -
NGÂN HÀNG CÂU HỎI TRẮC NGHIỆM THIẾT KẾ WEB
8 trang 212 0 0 -
101 trang 202 1 0
-
Tìm hiểu về ngôn ngữ lập trình C: Phần 1 - Quách Tuấn Ngọc
211 trang 150 0 0 -
161 trang 131 1 0
-
142 trang 130 0 0
-
Giáo trình Vi điều khiển PIC: Phần 1
119 trang 120 0 0 -
Bài giảng Phương pháp lập trình: Chương 9 - GV. Từ Thị Xuân Hiền
36 trang 113 0 0 -
Excel add in development in c and c phần 9
0 trang 110 0 0 -
78 trang 103 0 0