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

Bài giảng Lập trình nâng cao: Bài 6 - Lý Anh Tuấn

28 62 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

Thông tin cơ bản

Định dạng
Số trang 28
Dung lượng 459,21 KB

Các công cụ chuyển đổi và chỉnh sửa cho tài liệu này

Nội dung

Bài giảng Lập trình nâng cao - Ngôn ngữ lập trình nâng cao cung cấp cho người học các kiến thức: Xử lý ngoại lệ, thực thi ngoại lệ người dùng định nghĩa, thực thi luồng (threads). Mời các bạn cùng tham khảo nội dung chi tiết.

Trang 1

Object-Oriented Programming Using C#

NGÔN NGỮ LẬP TRÌNH NÂNG CAO

Trang 2

Object-Oriented Programming Using C#

Trong mục này, chúng ta sẽ học:

Xử lý ngoại lệ Thực thi ngoại lệ người dùng định nghĩa Thực thi luồng (threads)

Mục tiêu

Trang 3

Object-Oriented Programming Using C#

Một vài dẫn xuất trong lớp System.Exception

Nhắc lại

Lớp Exception Miêu tả System.IO.IOException Xử lý lỗi I/O

System.IndexOutOfRangeException Xử lý lỗi sinh ra khi một phương thức liên quan tới các thành phần

của mảng mà vượt quá phạm vi của nó System.NullReferenceException Xử lý lỗi sinh ra trong quá trình xứ lý đối tượng rỗng (null) System.DivideByZeroException Xử lý lỗi sinh ra trong quá trình xử lý phép chia cho 0 System.InvalidCastException Xử lý lỗi sinh ra trong quá trình ép kiểu

System.OutOfMemoryException Xử lý khởi tạo bộ nhớ cho ứng dụng bị lỗi System.ArithmeticException Xử lý lỗi sinh ra trong các phép toán số học, ép kiểu và chuyển

kiểu

System.InvalidCastException Xử lý lỗi khi ép kiểu lỗi System.ArgumentNullException Xử lý khi tham số có giá trị rỗng System.Data.DataException Xử lý lỗi khi sử dụng thành phần ADO.NET

Trang 4

Object-Oriented Programming Using C#

try catch finally

Chúng ta cùng tìm hiểu chi tiết về các từ khóa

Trang 5

Object-Oriented Programming Using C#

Khối try quản lý các câu lệnh bên trong nó và định nghĩa phạm

vi xử lý ngoại lệ liên quan tới nó

Khối try phải có ít nhất một khối catch

Trang 6

Object-Oriented Programming Using C#

Xử lý ngoại lệ (tiếp)

Khối catch:

Câu lệnh catch của khối catch đưa ra một đối tượng của lớp ngoại lệ như một tham số, trong đó nó đề cập tới ngoại lệ phát sinh

Chúng ta có thể xử lý ngoại lệ liên quan tới khối try bằng cách cung cấp một hoặc nhiều khối xử lý catch, ngay sau khối try:

try { //các câu lệnh có thể gây ra ngoại lệ }

catch (…) {

//Mã xử lý lỗi }

Trang 7

Object-Oriented Programming Using C#

Xử lý ngoại lệ (tiếp)

Khối finally:

Khối finally được sử dụng để xử lý một tập câu lệnh trong

đó một ngoại lệ được đưa ra hoặc không:

try { //Câu lệnh có thể gây ra ngoại lệ }

catch (…) {

//Mã xử lý lỗi }

finally {

//Câu lệnh phải được xử lý

Trang 8

Object-Oriented Programming Using C#

Ví dụ: Xử lý ngoại lệ

Trang 9

Object-Oriented Programming Using C#

Vấn đề đưa ra:

Duy đang làm việc trong một dự án trong đó anh phải tính toán tổng giá trị của mảng số nguyên Duy cần xử lý ngoại lệ có thể xảy ra khi anh ấy làm việc với mảng Nếu bất kỳ điều kiện

ngoại lệ xảy ra khi Duy thực thi chương trình, ứng dụng cần hiển thị thông tin về ngoại lệ tương ứng

Hãy giúp Duy xử lý các ngoại lệ này

Ví dụ: Xử lý ngoại lệ cho mảng

Trang 10

Object-Oriented Programming Using C#

Vấn đề đưa ra:

Hoàng đang làm việc trong một dự án của công ty FPT Software, trong đó anh phải viết chương trình tìm kiếm thông tin nhân viên dựa vào mã nhân viên của họ Hoàng cần xử lý ngoại lệ khi không tìm thấy nhân viên tương ứng

Hãy giúp Hoàng xử lý các ngoại lệ này

Ví dụ: Quản lý sinh viên

Trang 11

Object-Oriented Programming Using C#

Thực thi ngoại lệ người dùng định nghĩa

Trong C#, chúng ta có thể tạo các lớp ngoại lệ riêng Những ngoại lệ như vậy được biết tới như là ngoại lê người dùng định nghĩa

Lớp Exception là lớp cơ sở cho tất cả ngoại lệ trong C# Ngoại lệ người dùng định nghĩa phải được kế thừa hoặc từ

Trang 12

Object-Oriented Programming Using C#

Thực thi ngoại lệ người dùng định nghĩa (tiếp)

Các lớp ngoại lệ người dùng định nghĩa được dẫn xuất từ lớp ApplicationException

Để thực thi ngoại lệ người dùng định nghĩa, chúng ta cần:

Phát sinh ngoại lệ: Chúng ta có thể sử dụng câu lệnh throw để phát sinh các ngoại lệ

Ném (Throw) một đối tượng: Chúng ta có thể ném một đối tượng nếu đối tượng hoặc là trực tiếp hoặc là dẫn xuất gián tiếp từ System.Exception Chúng ta có thể sử dụng câu lệnh throw trong khối catch để ném một đối tượng như đoạn

mã sau:

catch(Exception caught)

{ throw caught }

Trang 13

Object-Oriented Programming Using C#

Một thread được định nghĩa như quá trình xử lý một chương trình

Chúng ta có thể định nghĩa một luồng duy nhất để điều khiển trong chương trình, sử dụng thread

Threads được sử dụng để chạy các ứng dụng thực thi tính toán lớn và phức tạp

Quá trình được xử lý sử dụng một thread được biết đến là quá trình thread đơn (single-threaded) trong đó quá trình một thể hiện chương trình đang chạy

Ứng dụng single-threaded chỉ thực thi một ứng dụng tại một thời điểm Chúng ta phải đợi một nhiệm vụ hoàn thành

trước khi thực thi nhiệm vụ khác

Thực thi luồng (Thread)

Trang 14

Object-Oriented Programming Using C#

Hình sau miêu tả quá trình xử lý của single-threaded

Để xử lý nhiều hơn một nhiệm vụ cùng một thời điểm, chúng ta có thể tạo nhiều threads trong một chương trình Quá trình tạo hai hoặc nhiều threads được gọi là đa luồng (multithreaded)

Thực thi luồng (Thread)

Trang 15

Object-Oriented Programming Using C#

Thực thi luồng (Thread)

Hình sau miêu tả quá trình xử lý multithreaded

Trang 16

Object-Oriented Programming Using C#

Mô hình thread trong C#

Trong hệ thống single-threaded, một phương pháp được gọi

là vòng lặp sự kiện với polling được sử dụng

Polling là quá trình một sự kiện được xử lý trong một thời điểm

Trong vòng lặp sự kiện với phương pháp polling, một thread đơn chạy trong một vòng lặp vô hạn cho tới khi hoạt động của nó được hoàn thành

Trong ứng dụng single-threaded nếu thread được tạm dừng (suspend) trong quá trình xử lý, toàn bộ chương trình dừng việc xử lý

Trong multithreading, Thời gian mà thread đợi để dành thời gian cho CPU có thể thực thi cho nhiệm vụ khác

Trang 17

Object-Oriented Programming Using C#

Mô hình thread trong C#

Trong C#, chúng ta sẽ sử dụng lớp Thread để làm việc với thread

Lớp System.Threading.Thread được sử dụng để xây dựng và truy cập các thread riêng trong ứng dụng

multithreaded

Trang 18

Object-Oriented Programming Using C#

Main Thread

Main thread được tạo tự động khi bắt đầu xử lý chương trình C#

Thread được tạo bằng việc sử dụng lớp Thread được gọi

là thread con, trong đó main thread được gọi là thread cha hoặc thread chính

Chúng ta có thể truy cập thread sử dụng thuộc tính CurrentThread của lớp Thread

Trang 19

Object-Oriented Programming Using C#

Trong C#, chúng ta tạo thread bằng cách tạo một đối tượng kiểu Thread, đưa ra một hàm tạo tham chiếu

ThreadStart, và gọi phương thức Start() của thread mới

Thread mới bắt đầu xử lý không đồng bộ với một lời gọi phương thức của thread

Lớp Thread có nhiều phương thức Chúng ta có thể sử dụng những phương thức để điều khiển việc xử lý thread Một số phương thức là:

Start(): Bắt đầu thread

Sleep(): Tạp dừng thread trong một khoảng thời gian

Trang 20

Object-Oriented Programming Using C#

Chúng ta có thể tạo thread bằng cách mở rộng lớp Thread Lớp thread mở rộng gọi phương thức Start() để bắt đầu thực thi thread con Ví dụ sau để tạo một thread:

ThreadStart ChildRef = new ThreadStart(ChildThreadCall);

Thread ChildThread = new Thread(ChildRef); ChildThread.Start();

Tạo Thread

Trang 21

Object-Oriented Programming Using C#

using System;

using System.Threading;

namespace Csharp {

class TestCsharp {

public static void CallToChildThread(){

Console.WriteLine("Thread con bat dau!!!");

} static void Main(string[] args){

ThreadStart childref = new ThreadStart(CallToChildThread);

Console.WriteLine("Trong Main Thread: tao thread con.");

Thread childThread = new Thread(childref);

childThread.Start();

Console.ReadKey();

}

Ví dụ 1: Tạo Thread

Trang 22

Object-Oriented Programming Using C#

class Program {

static void Main() {

Thread t = new Thread(new ThreadStart(MethodA));

t.Start();

MethodB();

} static void MethodA() {

for (int i = 0; i < 100; i++) Console.Write("0");

} static void MethodB() {

for (int i = 0; i < 100; i++) Console.Write("1");

} }

Ví dụ 2: Tạo Thread

Trang 23

Object-Oriented Programming Using C#

Trang 24

Object-Oriented Programming Using C#

public static void CallToChildThread(){

Console.WriteLine("Bat dau Thread con!!!");

// Thread nay dung khoang 5000 milisecond

Trang 25

Object-Oriented Programming Using C#

static void Main(string[] args)

{

ThreadStart childref = new ThreadStart(CallToChildThread);

Console.WriteLine("Trong Main Thread: tao Thread con.");

Thread childThread = new Thread(childref);

Trang 26

Object-Oriented Programming Using C#

Hủy Thread

Nếu thread yêu cầu hủy bỏ, phương thức Thread.Abort() cho phép chúng ta thực thi nhiệm vụ này

Bỏ qua thread đang chạy bằng cách ném một ngoại lệ ThreadAbortException Ngoại lệ này không thể bắt

Nếu khối finally được trình bày trong phương thức, khi chạy sẽ gửi điều khiển tới nó

Trang 27

Object-Oriented Programming Using C#

Trong mục này, chúng ta đã học:

Xử lý ngoại lệ được thực thi với các từ khóa sau:

try catch finally

Xử lý ngoại lệ cung cấp một cấu trúc và cách thức xử lý đồng

bộ các lỗi mức hệ thống và mức ứng dụng

Xử lý ngoại lệ là quá trình cung cấp một cách thức thay thế để

xử lý khi một ứng dụng không thể xử lý theo cách mong muốn Ngoài ra để xử lý ngoại lệ người dung định nghĩa, người sử dụng có thể tạo cá ngoại lệ riêng bằng cách dẫn xuất lớp ngoại

lệ từ lớp ApplicationException

Tổng kết

Trang 28

Object-Oriented Programming Using C#

Chúng ta chỉ có thể ném một đối tượng nếu các kiểu đối tượng hoặc dẫn xuất trực tiếp hoặc gián tiếp từ

Một chương trình tạo hai hoặc nhiều thread được gọi là chương trình đa luồng (multithreaded)

Lớp System.Threading được sử dụng để xây dựng và truy cập các thread riêng trong ứng dụng multithreaded

Tổng kết (tiếp)

Ngày đăng: 15/05/2020, 22:55

TỪ KHÓA LIÊN QUAN

🧩 Sản phẩm bạn có thể quan tâm