Chương 3. Giới thiệu lập trình
đa luồng
3.1. Khởi tạo và thực thi các luồng trên Windows
3.2. Đồng bộ và tránh xung đột trong lập trình đa
luồng
Chương 3. Giới thiệu lập trình đa luồng
114
Khởi tạo luồng mới:
Các tham số cần quan tâm:
StartAddress tên của hàm thực thi, cần được khai báo trước
Parameter con trỏ tham số truyền vào hàm thực thi
Kết quả trả về:
FALSE nếu xảy ra lỗi, có thể dùng hàm GetLastError() để xác định
NOT FALSE HANDLE sử dụng để tham chiếu đến luồng
3.1 Khởi tạo và thực thi các luồng
115
HANDLE CreateThread(
LPSECURITY_ATTRIBUTES ThreadAttributes,
DWORD StackSize,
LPTHREAD_START_ROUTINE StartAddress,
LPVOID Parameter,
DWORD CreationFlags,
LPDWORD ThreadId );
Khởi tạo luồng mới:
Hàm CreateThread() yêu cầu khai báo hàm thực thi (có thể khai
báo prototype trước khi thực hiện nội dung hàm)
Hàm thực thi được chạy ngay sau khi luồng được tạo
Ví dụ khai báo prototype của hàm thực thi:
3.1 Khởi tạo và thực thi các luồng
116
DWORD WINAPI MyThreadStart(LPVOID p);
Xóa luồng:
Mục đích giải phóng tài nguyên (bộ nhớ) sau khi các luồng thực
hiện xong.
Nếu tạo quá nhiều luồng mà không giải phóng tài nguyên:
Gây rò rỉ bộ nhớ
Không tạo thêm được luồng mới
Khi chương trình kết thúc, các luồng được tự động giải phóng.
3.1 Khởi tạo và thực thi các luồng
117
BOOL CloseHandle(HANDLE hObject);