Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> Lập Trình C

Windows Thread API trong chương trình C

Giới thiệu

Windows API tạo luồng bằng hàm CreateThread(), truyền các thuộc tính: bảo mật, kích thước stack, cờ tạo luồng. Mặc định luồng sẵn sàng chạy (không suspended).

Luồng cha phải chờ luồng con kết thúc trước khi đọc kết quả (biến Sum do luồng con ghi). Sử dụng WaitForSingleObject() (tương đương pthread_join). Để chờ nhiều luồng: WaitForMultipleObjects().

Code C - Windows Thread API

#include <windows.h>
#include <stdio.h>

DWORD Sum;  // Dữ liệu chung

DWORD WINAPI Summation(LPVOID Param) {
    DWORD Upper = *(DWORD*)Param;
    for (DWORD i = 0; i <= Upper; i++)
        Sum += i;
    return 0;
}

int main(int argc, char *argv[]) {
    DWORD ThreadId;
    HANDLE ThreadHandle;
    int Param;

    if (argc != 2) {
        fprintf(stderr, "An integer parameter is required\n");
        return -1;
    }
    Param = atoi(argv[1]);
    if (Param < 0) {
        fprintf(stderr, "An integer >= 0 is required\n");
        return -1;
    }

    ThreadHandle = CreateThread(
        NULL, 0, Summation, &Param, 0, &ThreadId
    );

    if (ThreadHandle != NULL) {
        WaitForSingleObject(ThreadHandle, INFINITE);
        CloseHandle(ThreadHandle);
        printf("sum = %d\n", Sum);
    }
    return 0;
}

So sánh Pthreads vs Windows Threads

Tính năngPthreadsWindows API
Tạo luồngpthread_create()CreateThread()
Chờ luồngpthread_join()WaitForSingleObject()
Đóng handleTự động / pthread_detach()CloseHandle()
Dữ liệu chungBiến toàn cụcBiến toàn cục

Chờ nhiều luồng

HANDLE THandles[N];
// ... tạo N luồng ...
WaitForMultipleObjects(N, THandles, TRUE, INFINITE);