多線程~~簡單的線程創建,C語言實現

原文地址:多線程~~簡單的線程創建,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;
}


結果是亂的,沒有實現線程同步,線程同步的將會在以後寫
下面是運行結果樣例:


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章