原文地址:多線程~~簡單的線程創建,C語言實現 - XD - CSDN博客
http://m.blog.csdn.net/qq_25425023/article/details/45251771
多線程~~簡單的線程創建,C語言實現
線程,是計算機中最小的執行單元。通常,在window應用程序運行時,操作系統都會爲其自動創建一個線程,即主線程。通過主
線程,可以創建多個線程或進程。
使用多線程,可以提高程序的執行效率。
線程創建函數CreateThread(),屬於API函數;
函數原型爲:
HANDLE CreateThread(
LPSECURITY_ATTRIBUTES lpThreadAttributes,
DWORD dwStackSize,
LPTHREAD_START_ROUTINE lpStartAddress,
LPVOID lpParameter,
DWORD dwCreationFlags,
LPDWORD lpThreadId );
參數含義:
lpThreadAttributes是一個指向結構體SECURITY_ATTRIBUTES的指針,表示指定新建線程的安全屬性。該參數可以設置爲NUL
L,表示創建線程時使用默認的安全屬性。
dwStackSize指定線程初始化時地址空間的大小。如果這個參數指定爲0,那麼新創建的線程的地址空間大小與調用該函數的線程地
址空間大小一樣。
lpStackAddress將指定該線程的線程函數的地址。當線程創建成功後,新建線程將調用該線程函數執行某個功能。
lpParameter表示將要傳遞給新建線程的命令行參數,新建線程可以根據該命令參數的不同而執行不同的功能。
dwCreationFlags用於指定新建線程創建後是否立即執行。有兩個狀態值,一個是CREATE_SUSPENDED,作用是創建線程成功
後暫停運行;另一個是0,作用是創建線程成功後立即運行。
lpThreadId表示新建線程的ID號,一般設置爲NULL。
下面是一個簡單的線程創建例子:
#include <stdio.h>
#include <windows.h>
DWORD WINAPI myfun1(LPVOID lpParameter); //聲明線程函數
DWORD WINAPI myfun2(LPVOID lpParameter);
int main()
{
HANDLE h1, h2; //定義句柄變量
h1 = ::CreateThread(NULL, 0, myfun1, NULL, 0, NULL); //創建線程
printf("線程1開始運行!\r\n");
h2 = ::CreateThread(NULL, 0, myfun2, NULL, 0, NULL);
printf("線程2開始運行!\r\n");
::CloseHandle(h1); //關閉線程句柄對象
::CloseHandle(h2);
if(getchar() == 'q')
{
return 0;
}
else
::Sleep(1000);
return 0;
}
DWORD WINAPI myfun1(LPVOID lpParameter) //分別實現線程函數
{
printf("線程1正在運行!\r\n");
return 0;
}
DWORD WINAPI myfun2(LPVOID lpParameter)
{
printf("線程2正在運行!\r\n");
return 0;
}
下面是運行結果樣例: