1. Trang chủ
  2. » Công Nghệ Thông Tin

Bài giảng Lập trình hướng sự kiện: Bài 4 - ThS. Phan Thanh Toàn

30 24 0

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

THÔNG TIN TÀI LIỆU

Bài giảng Lập trình hướng sự kiện - Bài 4: Cơ chế Delegate và Threading giúp người học phân biệt được delegate và event; các ứng dụng đơn tiến trình và đa tiến trình; khái niệm đồng bộ trong ứng dụng; ngôn ngữ C# vào triển khai các ứng dụng đồng bộ và đa tiến trình.

GIỚI THIỆU MƠN HỌC LẬP TRÌNH HƯỚNG SỰ KIỆN Giảng viên: ThS Phan Thanh Toàn v1.0015102206 BÀI CƠ CHẾ DELEGATE VÀ THREADING Giảng viên: ThS Phan Thanh Toàn v1.0015102206 MỤC TIÊU BÀI HỌC • Phân biệt delegate event • Phân biệt ứng dụng đơn tiến trình đa tiến trình • Trình bày khái niệm đồng ứng dụng • Vận dụng ngôn ngữ C# vào triển khai ứng dụng đồng đa tiến trình v1.0015102206 CÁC KIẾN THỨC CẦN CĨ Để học mơn học này, sinh viên phải học xong mơn học: • Cơ sở lập trình; • Lập trình hướng đối tượng; • Cơ sở liệu; • Hệ quản trị sở liệu SQL Server v1.0015102206 HƯỚNG DẪN HỌC • Đọc tài liệu tham khảo • Thảo luận với giáo viên sinh viên khác vấn đề chưa hiểu rõ • Trả lời câu hỏi học v1.0015102206 CẤU TRÚC NỘI DUNG 4.1 4.2 v1.0015102206 Delegate Event Threading 4.1 DELEGATE VÀ EVENT 4.1.1 Delegate 4.1.2 Event v1.0015102206 4.1.1 DELEGATE • Delegate chế ủy quyền lập trình hướng đối tượng • Delegate sử dụng trỏ hàm • Delegate đóng gói phương thức với tập hợp tham số kiểu trả xác định • Delegate đóng gói phương thức static phương thức instance • Single-cast delegate: Chứa phương thức • Multi-cast delegate: Chứa nhiều phương thức v1.0015102206 4.1.1 DELEGATE (tiếp theo) • • Định nghĩa delegate: public delegate đối số); (danh sách Khởi tạo delegate trỏ delegate tới phương thức: =new (Tên phương thức); • Ví dụ: Khai báo delegate TinhToan xây dựng hàm Tong (tính tổng số nguyên) hàm Tru (tính hiệu số ngun), sau khởi tạo trỏ delegate tới hàm Tong Tru  Khai báo delegate TinhToan public delegate int TinhToan(int x,int y);  Xây dựng hàm Tong Hieu static int Tong(int a, int b) { return a+b; } static int Tru(int a, int b) { return a-b; } v1.0015102206 4.1.1 DELEGATE (tiếp theo)  Hàm main() khởi tạo delegate pheptoan trỏ đến hàm Tong, Tru để thực tính tổng hiệu số nguyên static void Main(string[] args) { TinhToan pheptoan = new TinhToan(Tong); int tong = pheptoan(30, 40); pheptoan = new TinhToan(Tru); int hieu = pheptoan(50, 30); Console.WriteLine("TONG LA: {0}",tong); Console.WriteLine("HIEU LA: {0}", hieu); } v1.0015102206 10 4.1.2 EVENT (tiếp theo) class Clock { public delegate void SecondChangeHandler(object EventArgs info); public event SecondChangeHandler OnSecondChange; public void Run() { while (true) { Thread.Sleep(1000); if (OnSecondChange != null) { OnSecondChange(this, new EventArgs()); } } } } v1.0015102206 clock, 16 4.1.2 EVENT (tiếp theo) • Xây dựng lớp DigitalClock: Xây dựng phương thức xử lí Show DigitalClock public void Show(object obj, EventArgs args) { DateTime d = DateTime.Now; Console.WriteLine("Digital Clock is: {0}:{1}:{2}",d.Hour,d.Minute,d.Second); } • Đăng kí xử lí kiện lớp DigitalClock: public void Subscribe(Clock theClock) { theClock.OnSecondChange+=new Clock.SecondChangeHandler(Show); } v1.0015102206 17 4.1.2 EVENT (tiếp theo) class DigitalClock { public void Subscribe(Clock theClock) { theClock.OnSecondChange+=new Clock.SecondChangeHandler(Show); } public void Show(object obj, EventArgs args) { DateTime d = DateTime.Now; Console.WriteLine("Digital Clock is: {0}:{1}:{2}",d.Hour,d.Minute,d.Second); } } v1.0015102206 18 4.1.2 EVENT (tiếp theo) • Tương tự xây dựng lớp AnalogClock: class AnalogClock { public void Subscribe(Clock theClock) { theClock.OnSecondChange += new Clock.SecondChangeHandler(Show); } public void Show(object obj, EventArgs args) { DateTime d = DateTime.Now; Console.WriteLine("Analog Clock is: {0}:{1}:{2}", d.Hour, d.Minute, d.Second); } } v1.0015102206 19 4.1.2 EVENT (tiếp theo) • Gọi thực thi kiện lớp DigitalClock AnalogClock Clock myClock = new Clock(); DigitalClock c1 = new DigitalClock(); AnalogClock c2 = new AnalogClock(); c1.Subscribe(myClock); c2.Subscribe(myClock); myClock.Run(); v1.0015102206 20 4.2 THREADING 4.2.1 Khai báo khởi tạo tiến trình 4.2.2 Lập trình đồng v1.0015102206 21 4.2.1 KHAI BÁO VÀ KHỞI TẠO TIẾN TRÌNH • Tiến trình chương trình hoạt động • Có loại tiến trình: tiến trình hệ điều hành, tiến trình người dùng • Threading kĩ thuật hỗ trợ thực nhiều tiến trình thời điểm • Lớp Thread sử dụng để tạo thực thi tiến trình v1.0015102206 22 4.2.1 KHAI BÁO VÀ KHỞI TẠO TIẾN TRÌNH • Các thuộc tính:  IsAlive;  IsBackground;  IsThreadPoolThread;  Name;  Priority;  ThreadState;  CurrentThread • Các phương thức:  Abort;  Interrupt;  Join;  Resume;  Start;  Suspend; v1.0015102206 23 4.2.1 KHAI BÁO VÀ KHỞI TẠO TIẾN TRÌNH (tiếp theo) • • • Các thao tác tiến trình:  Khởi tạo tiến trình;  Thực thi tiến trình;  Ghép nối tiến trình;  Tạm dừng hủy bỏ tiến trình Khởi tạo tiến trình:  Tạo phương thức khơng tham số, không kiểu liệu trả về;  Tạo ủy nhiệm hàm ThreadStart với phương thức vừa tạo;  Tạo Thread với ủy nhiệm hàm ThreadStart vừa tạo Ví dụ: Xây dựng lớp Athlete với phương thức Run public void Run() { float currentLength = 0; while (currentLength < doanduong) { currentLength += (float)speed / 1000; } Console.Write("\n{0} ve dich\n", name); } v1.0015102206 24 4.2.1 KHAI BÁO VÀ KHỞI TẠO TIẾN TRÌNH (tiếp theo) • Thực thi tiến trình:  Tiến trình khởi tạo khơng tự thực thi;  Gọi phương thức Start để thực thi tiến trình Athlete v1 = new Athlete("Nguyen Van Hung",10); Thread t1 = new Thread(new ThreadStart(v1.Run)); t1.Start(); • Thực thi đa tiến trình:  Thread hỗ trợ đa tiến trình: Ví dụ: Tạo vận động viên (thuộc lớp Athlete) cho thực đồng thời Athlete v1 = new Athlete("Nguyen Van Hung",10); Athlete v2 = new Athlete(“Le Van Lam",15); Thread t1 = new Thread(new ThreadStart(v1.Run)); Thread t2 = new Thread(new ThreadStart(v2.Run)); t1.Start(); t2.Start(); v1.0015102206 25 4.2.1 KHAI BÁO VÀ KHỞI TẠO TIẾN TRÌNH (tiếp theo)  Thiết lập quyền ưu tiên cho tiến trình: Priority = Ví dụ: Athlete v1 = new Athlete("Nguyen Van Hung",10); Athlete v2 = new Athlete(“Le Van Lam",15); Thread t1 = new Thread(new ThreadStart(v1.Run)); Thread t2 = new Thread(new ThreadStart(v2.Run)); t1.Priority = ThreadPriority.Normal; t2.Priority = ThreadPriority.Highest; t1.Start(); t2.Start(); • Loại bỏ tiến trình: Abort(); • Tạm dừng tiến trình: Suspend(); Phương thức tạm dừng tiến trình gặp phương thức Resume() v1.0015102206 26 4.2.2 LẬP TRÌNH ĐỒNG BỘ • Bảo vệ tài nguyên, cho phép tiến trình truy cập liệu • Đồng hóa cung cấp khóa đối tượng, khóa ngăn cản thread khác truy cập vào đối tượng thread thứ chưa trả lại quyền truy cập đối tượng Ví dụ: Chương trình xây dựng lớp Integer với phương thức Increment để tăng biến counter lên Trong phương thức Increment sử dụng biến temp để lưu tạm thời giá trị biến counter, Thread thứ tăng biến temp lên gán trở lại biến counter, sau Thread thứ lại đọc giá trị biến counter biến temp tăng biến temp lên lại gán trở lại biến counter v1.0015102206 27 4.2.2 LẬP TRÌNH ĐỒNG BỘ class Integer { static int counter = 0; public void Increment() { while (counter < 10) { int temp = counter; temp++; counter++; Thread.Sleep(1000); counter = temp; Console.WriteLine("Thread {0} Thread.CurrentThread.Name,counter); } } } v1.0015102206 Increment: {1}", 28 4.2.2 LẬP TRÌNH ĐỒNG BỘ • Sử dụng từ khóa lock để khóa khối code cần thực thi static int counter = 0; public void Increment() { while (counter < 10) { lock (this) { int temp = counter; temp++; Thread.Sleep(1000); counter = temp; } Console.WriteLine("Thread {0} Increment: {1}", Thread.CurrentThread.Name,counter); } } v1.0015102206 29 TÓM LƯỢC CUỐI BÀI Trong này, nghiên cứu nội dung sau: v1.0015102206 • Delegate chế ủy quyền lập trình hướng đối tượng; • Khai báo khởi tạo kiện; • Lập trình đa luồng ứng dụng đồng hóa 30 ... 20 4. 2 THREADING 4. 2.1 Khai báo khởi tạo tiến trình 4. 2.2 Lập trình đồng v1.0015102206 21 4. 2.1 KHAI BÁO VÀ KHỞI TẠO TIẾN TRÌNH • Tiến trình chương trình hoạt động • Có loại tiến trình: tiến trình. ..BÀI CƠ CHẾ DELEGATE VÀ THREADING Giảng viên: ThS Phan Thanh Tồn v1.0015102206 MỤC TIÊU BÀI HỌC • Phân biệt delegate event • Phân biệt ứng dụng đơn tiến trình đa tiến trình • Trình bày... v1.0015102206 Delegate Event Threading 4. 1 DELEGATE VÀ EVENT 4. 1.1 Delegate 4. 1.2 Event v1.0015102206 4. 1.1 DELEGATE • Delegate chế ủy quyền lập trình hướng đối tượng • Delegate sử dụng trỏ hàm

Ngày đăng: 16/12/2020, 10:04

Xem thêm: