Bài giảng Kỹ thuật lập trình hệ cơ điện tử: Chương 13 - TS. Đặng Thái Việt

83 59 0
Bài giảng Kỹ thuật lập trình hệ cơ điện tử: Chương 13 - TS. Đặng Thái Việt

Đ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 Kỹ thuật lập trình hệ cơ điện tử: Chương 13 - C++ nâng cao được biên soạn bao gồm các nội dung chính sau: Xử lý ngoại lệ (Exception Handling; Bộ nhớ độn; Namespace; Template; Bộ tiền xử lý (Preprocessor); Xử lý tín hiệu (Signal Handling); Đa luồng (Multithread); Một số lớp quan trọng. Mời các bạn cùng tham khảo bài giảng!

TRƯỜNG ĐẠI HỌC BÁCH KHOA HÀ NỘI KỸ THUẬT LẬP TRÌNH HỆ CƠ ĐIỆN  TỬ Programming Engineering in Mechatronics Giảng viên: TS. TS. Đặng Thái Việt Đơn vị: Bộ mơn Cơ điện tử, Viện Cơ khí Hà Nội, 09/2017 CHƯƠNG 13. C++ nâng cao 13.1  Xử lý ngoại lệ (Exception Handling) 13.2  Bộ nhớ động 13.3  Namespace 13.4  Template 13.5 Bộ tiền xử lý (Preprocessor) 13.6 Xử lý tín hiệu (Signal Handling) 13.7 Đa luồng (Multithread) 13.8 Một số lớp quan trọng Xử lý ngoại lệ (Exception Handling) Giới thiệu • • Một Exception (ngoại lệ) là  một  vấn  đề  xuất  hiện  trong  khi thực thi một chương trình. Một Exception trong C++ là  một  phản  hồi  về  một  tình  huống  ngoại  lệ  mà  xuất  hiện  trong khi một chương trình đang chạy, ví dụ như chia cho  số 0 Exception cung cấp một cách để truyền điều khiển từ một  phần  của  một  chương  trình  tới  phần  khác.  Exception  Handling (Xử lý ngoại lệ) trong C++ được xây dựng dựa  trên 3 từ khóa là: try, catch, và throw Xử lý ngoại lệ (Exception Handling) Giới thiệu § § § throw: Một chương trình ném một Exception khi một vấn  đề  xuất  hiện.  Việc  này  được  thực  hiện  bởi  sử  dụng  từ  khóa throw trong C++ catch: Một  chương  trình  bắt  một  Exception  với  một  Exception  Handler  tại  vị  trí  trong  một  chương  trình  nơi  bạn muốn xử lý vấn đề đó. Từ khóa catch trong C++ chỉ  dẫn việc bắt một exception try: Một  khối try có  thể  được  bắt  bởi  một  số  lượng  cụ  thể  exception.  Nó  được  theo  sau  bởi  một  hoặc  nhiều  khối catch Xử lý ngoại lệ (Exception Handling) Giới thiệu • Giả  sử  một  khối  sẽ  tạo  một  Exeption,  một  phương  thức  bắt  một  exception  bởi  sử  dụng  kết  hợp  các  từ  khóa try và catch.  Một  khối  try/catch  được  đặt  xung  quanh code mà có thể tạo một exception. Code bên trong  một  khối  try/catch  được  xem  như  là  code  được  bảo  vệ,  và cú pháp để sử dụng try/catch trong C++ như sau: Xử lý ngoại lệ (Exception Handling) Giới thiệu Xử lý ngoại lệ (Exception Handling) Ném Exception trong C++ • Exception có thể bị ném ở bất cứ đâu bên trong một khối  code  bởi  sử  dụng  các  lệnh throw trong  C++. Tốn  hạng  của lệnh throw quyết định kiểu cho exception và có thể là  bất kỳ biểu thức nào và kiểu kết quả của biểu thức quyết  định kiểu của exception bị ném Xử lý ngoại lệ (Exception Handling) Bắt Exception trong C++ • Khối catch theo  sau  khối  try  trong  C++  sẽ  bắt  bất  kỳ  exception  nào.  Bạn  có  thể  xác  định  kiểu  của  exception  bạn  muốn  bắt  và  điều  này  được  xác  định  bởi  khai  báo  exception  mà  xuất  hiện  trong  các  dấu  ngoặc  đơn  theo  sau từ khóa catch trong C++ Xử lý ngoại lệ (Exception Handling) Bắt Exception trong C++ • Code  trên  sẽ  bắt  một  exception  có  kiểu  là ten_Exception. Nếu bạn muốn xác định rằng một khối  catch  nến  xử  lý  bất  kỳ  kiểu  exception  nào  bị  ném  trong  một khối try, bạn phải đặt một dấu ba chấm (…) trong các  dấu ngoặc đơn theo sau từ khóa catch, như sau: Xử lý ngoại lệ (Exception Handling) Ví dụ 10 Đa luồng (Multithread) Joinable and not Joinable threads • • • • Sau khi hàm join return, thread trở lên khơng thể join lại.  1 joinable thread là 1 thread mà đại diện cho 1 execution  mà chưa join 1 thread khơng là joinable khi nó được khởi tạo mặc định  hoặc được moved/assigned tới 1 thread khác hoặc joind  hoặc detach hàm đã được họi Not joinable thread có thể huỷ 1 cách an tồn Hàm joinable để checks thread có là joinable thread hay  khơng 69 Đa luồng (Multithread) Joinable and not Joinable threads • • Nên sử dụng hàm này trước khi call hàm join(); This function returns true if the thread is joinable and  false otherwise. It’s better to check if the thread is  joinable before join() function is called: 70 Đa luồng (Multithread) Detaching thread • • Như đã nhắc ở trên, thread trở thành not joinable sau khi  hàm detach được gọi Hàm này tách 1 thread từ 1 thread cha, nó cho phép  thread cha và thread con được chạy ngay lập tức từ cái  cịn lại. Sau khi call detach functon, các thread sẽ khơng  đồng bộ trong bất kỳ cách nào 71 Đa luồng (Multithread) Detaching thread Bạn nhận thấy mainthread không đợi thread bị huỷ! 72 Đa luồng (Multithread) Initializing thread with an object • Bạn có thể khởi tạo thread khơng chỉ với 1 function mà  có thể dùng với 1 object hoặc 1 function của class 73 Đa luồng (Multithread) Initializing thread with an object • Bây giờ bạn có thể khởi tạo thread bằng cách truyền  object của class myFunctor vào hàm khởi tạo của thread: 74 Đa luồng (Multithread) Initializing thread with an object • • Nếu bạn muốn khởi tạo thread với 1 public function của  class, bạn phải định nghĩa function và truyền object của  class định nghĩa function đó: Bây giờ có thể khởi tạo thread với hàm publicFunction  của myFunctor class: 75 Đa luồng (Multithread) Passing arguments to thread • • Trong ví dụ trên chúng ta chỉ sử dụng hàm và đối tượng  mà khơng phải truyền thêm các argyments vào các hàm  và object Chúng ta có thể sử dụng function vớ các paramaters cho  khác hàm khởi tạo thread. Vd: 76 Đa luồng (Multithread) Passing arguments to thread • Có thruyền pointer tới function. Để truyền các arguments  Để thấy function này có 3 arguments. Nếu bạn muốn  khởi tạo với function này, trước hết bạn phải truyền con  trỏ tới hàm 77 Đa luồng (Multithread) Passing arguments to thread • • Khi bạn khởi tạo 1 thread với 1 object có params, chúng  ta phải add list các param tương ứng vào When you want to initialize a thread with an object with  parameters, we have to add corresponding parameter list  to the overloading version of operator (): 78 Đa luồng (Multithread) Passing arguments to thread • • Bạn có thể thấy, operator () có 2 paramaters: Khởi tạo thread với 1 object trong trường hợp này giống  như sử dụng hàm với các paramater: 79 Đa luồng (Multithread) Passing arguments to thread • Có thể sử dụng 1 hàm của class như params của thread.  Add 1 public function vào myFunctorParam class: 80 Đa luồng (Multithread) Passing arguments to thread • Truyền argument vào member function: 81 Đa luồng (Multithread) ThreadID • Mọi thread đều có 1 unique identifier. Và trong class  thread có 1 public function cho phép get ra giá trị của  thread Id giá trị trả về kiểu id được định nghĩa trong Thread  class 82 Đa luồng (Multithread) ThreadID 83 ...CHƯƠNG? ?13.  C++ nâng cao 13. 1  Xử lý ngoại lệ (Exception Handling) 13. 2  Bộ nhớ động 13. 3  Namespace 13. 4  Template 13. 5 Bộ tiền xử lý (Preprocessor) 13. 6 Xử lý tín hiệu (Signal Handling) 13. 7... mà  xuất  hiện  trong khi một? ?chương? ?trình? ?đang chạy, ví dụ như chia cho  số 0 Exception cung cấp một cách để truyền điều khiển từ một  phần  của  một  chương? ? trình? ? tới  phần  khác.  Exception ... Giới thiệu § § § throw: Một? ?chương? ?trình? ?ném một Exception khi một vấn  đề  xuất  hiện.  Việc  này  được  thực  hiện  bởi  sử  dụng  từ  khóa throw trong C++ catch: Một  chương? ? trình? ? bắt  một  Exception 

Ngày đăng: 26/01/2023, 17:34

Tài liệu cùng người dùng

Tài liệu liên quan