Kisser Leon

这个kisser不太冷
posts - 100, comments - 102, trackbacks - 0, articles - 0

Win32 Thread API学习

Posted on 2007-03-18 17:40 kk 阅读(2762) 评论(0)  编辑 收藏 引用 所属分类: IT

第一个 API :创建一个线程

CreateThread()

The CreateThread function creates a thread to execute within the address space of the calling process.

HANDLE CreateThread(

    LPSECURITY_ATTRIBUTES lpThreadAttributes,                // pointer to thread security attributes 

    DWORD dwStackSize,                // initial thread stack size, in bytes

    LPTHREAD_START_ROUTINE lpStartAddress,  // pointer to thread function

    LPVOID lpParameter,// argument for new thread

    DWORD dwCreationFlags,        // creation flags

    LPDWORD lpThreadId                // pointer to returned thread identifier

   );

Return Values

If the function succeeds, the return value is a handle to the new thread.

If the function fails, the return value is NULL. To get extended error information, call etLastError.

Example1: 创建一个线程

#include <windows.h>

 

DWORD WINAPI threadFunc (LPVOIDpArg)

{

       return 0;

}

 

main ()

{     

       HANDLE hThread;

       hThread = CreateThread (NULL, 0, threadFunc, NULL, 0, NULL );

       return 0;

}

 

上面这段代码有一个小问题,那就是 threadFunc 有可能不会被执行到就结束了!要保证 threadFunc 肯定被执行(也就是等线程退出),在 CreateThread 后加一行代码:

                WaitForMultipleObjects (1, &hThread, TRUE, INFINITE);



第二个
API :等待线程返回

WaitForMultipleObjects

The WaitForMultipleObjects function returns when one of the following occurs:

Either any one or all of the specified objects are in the signaled state.

The time-out interval elapses.

DWORD WaitForMultipleObjects(

    DWORD nCount,          // number of handles in the object handle array

    CONST HANDLE *lpHandles,   // pointer to the object-handle array

    BOOL bWaitAll,             // wait flag

    DWORD dwMilliseconds           // time-out interval in milliseconds

   );

If dwMilliseconds is INFINITE, the function's time-out interval never elapses.

Example2: 四个线程一起运行

#include <Windows.h>

#include <stdio.h>

const int numThreads = 4;

 

DWORD WINAPI threadFunc(LPVOIDpArg)

{

       int *p = (int *)pArg;

       int num = *p;

       printf("threadFunc...%d...\n", num);

       return 0;

}

 

int main()

{

       HANDLE hThread[numThreads];

       int threadNum[numThreads];

       for(inti=0; i<numThreads; i++)

       {

              threadNum[i] = i;

              hThread[i] = CreateThread(NULL, 0, threadFunc, &threadNum[i], 0, NULL);

       }

      

       WaitForMultipleObjects(numThreads, hThread, TRUE, INFINITE);

       return 0;

}


只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理