Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> การเขียนโปรแกรม C

Windows Thread API ใน C

Windows ใช้ CreateThread() สร้างเธรด และ WaitForSingleObject() รอเธรดจบ (เหมือน pthread_join)

ฟังก์ชันหลัก

  • CreateThread() พารามิเตอร์: security, stack size, thread function, parameter, flags, thread ID
  • WaitForSingleObject(handle, INFINITE) บล็อกจนเธรดจบ
  • CloseHandle() ปิด handle เธรด
  • WaitForMultipleObjects() รอหลายเธรดพร้อมกัน

ตัวอย่าง: คำนวณผลรวมในเธรดแยก

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

DWORD Sum = 0;
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[]) {
    if (argc != 2) { fprintf(stderr, "Need integer param\n"); return -1; }
    DWORD Param = atoi(argv[1]);
    if (Param < 0) { fprintf(stderr, "Must be >= 0\n"); return -1; }

    HANDLE ThreadHandle;
    DWORD ThreadId;
    ThreadHandle = CreateThread(NULL, 0, Summation, &Param, 0, &ThreadId);
    if (ThreadHandle) {
        WaitForSingleObject(ThreadHandle, INFINITE);
        CloseHandle(ThreadHandle);
        printf("Sum = %d\n", Sum);
    }
    return 0;
}

คอมไพล์

gcc program.c -o program.exe (ต้องใช้ MinGW/w64)