Quản lý lỗi trên Symbian 1.Cơ chế bắt lỗ i trên Symbian.

Một phần của tài liệu Tìm hiểu công nghệ bluetooth và viết ứng dụng minh họa (Đào Quý Thái An vs Trần Thị Mỹ Hạnh)- 3 pdf (Trang 42 - 44)

Trên môi trường máy tính để bàn, Java và C++ quản lý các lỗi chương trình thông qua các exeption với các cơ chế như throw hoặc try-catch. Nhưng lúc Symbian được thiết kế thì cơ chế exception chưa được giới thiệu trên C++ , hơn nữa sau này khi được giới thiệu thì nó cũng tỏ ra không thích hợp với môi trường hạn chế về xử lý cũng như tài nguyên như Symbian, bởi vì nó làm tăng đáng kể kích thước mã biên dịch và tốn nhiều RAM. Vì vậy, Symbian đưa ra một cơ chế quản lý lỗi cho riêng mình được biết tới tên gọi là “leave”.

Cơ chế hoạt động của “leave” như sau : khi xảy ra một lỗi nào đó (như thiếu bộ nhớ để cấp phát, thiếu vùng nhớ để ghi, lỗi trong truyền thông hay thiếu năng lượng cho các tài nguyên,...) thì hàm đang hoạt động sẽ bị ngắt lại, hệ điều hành tiến hành quét các chỉ thị, các hàm sẽ thực thi sau nó và quyền điều khiển sẽ được chuyển đến phần chỉ thị xử lý lỗi đầu tiên mà nó tìm thấy trong các hàm này.

Hành động ngắt hàm bị lỗi và chuyển đến phần xử lý lỗi được gọi là “leave” (thoát). Một “leave” là một cuộc gọi đến hàm User::Leave(), nó sẽ gây ra một ngoại lệ (exception) và lập tức tìm gọi phần xử lý lỗi gọi là “trap

Tìm hiểu công nghệ Bluetooth và viết ứng dụng minh họa

harness”. Tất cả các hàm có thể “leave” thì đều có tên kết thúc bằng chữ cái L. “Leave” trong C++ trên Symbian giống như “throw” và “trap harness” giống như “try-catch” trên C++ và Java trong môi trường máy tính để bàn.

Symbian cung cấp 2 macro”trap harness” là TRAP và TRAPD. Bất cứ khi nào xảy ra lỗi dẫn đến leave tại hàm được đặt làm tham số của các macro “trap harness” thì ngay lập tức quyền điều khiển hoạt động chương trình sẽ được trả về cho các macro này. Các macro này sẽ trả về mã lỗi gắn với hàm gây lỗi. Hai macro TRAP và TRAPD là giống nhau, chỉ khác là ở TRAP biến chứa mã lỗi trả về phải khai báo trước.

//; Macro TRAPD TRAPD(error,someFuncL()); if (error!=KErrNone) { //Xử lý lỗi } //; Macro TRAP TInt error; TRAP(error,someFuncL()); if (error!=KErrNone) { //Xử lý lỗi } 6.4.2.Hàm Leave.

Theo qui ước trong đặt tên hàm của Symbian, hàm Leave là hàm được kết thúc bằng kí tự L, ví dụ như NewL(), RunL()... Việc biết một hàm có phải là một hàm Leave hay không rất quan trọng, bởi vì Symbian là một môi trường rất hạn hẹp về tài nguyên, vì vậy, lỗi thiếu tài nguyên hay xảy ra, nếu một hàm leave không được xử lý kĩ thì rất dễ gây ra một lỗi rất lớn, đó là làm “lủng” bộ nhớ (memory leak).

Tìm hiểu công nghệ Bluetooth và viết ứng dụng minh họa Một hàm có thể Leave nếu nó :

+ Thực hiện các tác vụ có liên quan đến tài nguyên.

+ Gọi hàm có thể leave mà không được gọi kèm với các trap harness như TRAP hay TRAPD để xử lý lỗi nếu xảy ra.

+ Có gọi một trong các hàm hệ thống đảm nhận leave như User::Leave() hay User::LeaveIfError(),...

+ Có dùng toán tử new(Eleave).

Một phần của tài liệu Tìm hiểu công nghệ bluetooth và viết ứng dụng minh họa (Đào Quý Thái An vs Trần Thị Mỹ Hạnh)- 3 pdf (Trang 42 - 44)

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

(64 trang)