tailieunhanh - Bài giảng Lập trình Windows - Chương 8: Lập trình đa luồng (2016)
Bài giảng "Lập trình Windows - Chương 8: Lập trình đa luồng" cung cấp cho người học các kiến thức: Giới thiệu lập trình đa luồng, lập trình luồng làm việc, lập trình luồng giao diện, một số lệnh liên quan, đồng bộ các luồng. . | Chương 8 Lập trình đa luồng 1 . Giới thiệu lập trình đa luồng Khai thác tính đa nhiệm, một chương trình có thể lập trình thực hiện nhiều phần việc đồng thời. Gọi là lập trình đa luồng (thread), có thể gọi đa tuyến. Luồng là quá trình thực hiện một đơn vị chương trình, độc lập với thực hiện các đơn vị khác trong chương trình đó. Mỗi luồng thường gắn với thực hiện một hàm nào đó trong chương trình, ta gọi hàm này là hàm luồng. Mỗi chương trình khi chạy luôn có một luồng ứng với thực hiện hàm chính của chương trình (WinMain), các luồng khác được tạo ra từ luồng này. luồng 3 luồng 2 luồng 1 luồng 4 luồng chính (main thread) thời gian 2 . Giới thiệu lập trình đa luồng Mỗi luồng trong chương trình có mức độ ưu tiên thực hiện, là tài nguyên thời gian máy dành cho luồng. Ngoài ra mỗi luồng có các tài nguyên như stack, mức độ bảo mật,. Minh họa một chương trình đa luồng ứng với các hàm: Chương trình Hàm 1 Hàm 2 Hàm 3 Luồng 1 Luồng 2 Luồng chính (main thread) Luồng 3 Luồng 4 Có hai loại luồng: luồng làm việc (worker) và luồng giao diện (user interface). Luồng làm việc chỉ chạy bên trong máy, còn luồng giao diện cung cấp những tương tác với người dùng. 3 . Lập trình luồng làm việc Luồng làm việc được lập trình bởi một hàm gọi là hàm luồng, sau đó tạo luồng từ hàm này, gồm hai bước sau: Bước 1: Lập hàm xử lý luồng (hàm luồng), mẫu hàm khai báo như sau: UINT tên_hàm ( LPVOID tham_số ); Trong đó tham số sẽ nhận các dữ liệu cho việc thực hiện bên trong hàm luồng, nó được truyền từ câu lệnh tạo luồng ở bước 2. Bước 2: Tạo luồng tại thời điểm cần thiết CWinThread* AfxBeginThread( tên_hàm_luồng , dữ_liệu_truyền ); Có thể quy định các tham số như độ ưu tiên, độ lớn stack,. trong tham số của lệnh tạo luồng. Mẫu đầy đủ như sau: CWinThread* AfxBeginThread( AFX_THREADPROC pfnThreadProc, LPVOID pParam, int nPriority = THREAD_PRIORITY_NORMAL, UINT nStackSize = 0, DWORD dwCreateFlags = 0, LPSECURITY_ATTRIBUTES lpSecurityAttrs = NULL .
đang nạp các trang xem trước