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


DWORD Sum; /* data is shared by the thread(s) */

/* the thread runs in this separate function */
DWORD WINAPI Summation(PVOID 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;

    // do some basic error checking
    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;
    }

    // create the thread
    ThreadHandle = CreateThread(NULL, 0, Summation, &Param, 0, &ThreadId);

    if (ThreadHandle != NULL) {
        WaitForSingleObject(ThreadHandle, INFINITE);
        CloseHandle(ThreadHandle);
        printf("sum = %d\n",Sum);
    }
}
  1. 必须包含windows.h头文件
  2. 在Pthread中,在单独线程中共享的数据sum,在这里被声明为全局变量(DWORD数据类型是一个无符号的32位整数)。
  3. 需要在单独线程中执行的Summation()函数,向该函数传递一个void指针,Windows将其定义为LPVOID,执行该函数的线程将全局数据sum从0设置为传递给 Summation()的参数
  4. Window使用CreateThread()来创建线程,就像Pthread一样,也需要传递一些列的属性,这些属性包含安全信息,栈大小,一个用以标识线程挂起状态是否开始的标识。
  5. 在Windows中使用WaitForSingleObject()来执行类似于Pthread中的fork-join。父线程会则色,直到计算(子)线程终止
  6. 在需要等待多个线程完成的情况下,可以使用WaitForMultipleObjects()函数,该函数需要四个参数:(1)要等待的对象的数量(2)指向对象数组的指针(3)指示是否所有对象结束的标志(4)超时(或者是INFINITE,即无超时时间的)。比如THandles是一个大小为N的线程HANDLE对象的数组,父进程可以像下面这样,等待这些子进程的终止:
WaitForMultipleObjects(N, THandles, TRUE, INFINITE);

results matching ""

    No results matching ""