如何在VC中利用系統函數創建一個新的線程

       我們知道,要創建一個線程,必須得有一個主進程,然後由這個主進程來創建一個線程,在一般的VC程序中,主函數所在的進程就是程序的主進程。

       讓我們從主函數來開始編寫我們這個簡單的小程序。我們知道CreateThread函數可以用來創建一個線程,在MSDN中查找這個函數得到如下信息:"The CreateThread function creates a thread to execute within the address space of the calling process."和"If the function succeeds, the return value is a handle to the new thread."所以我們得定義一個句柄用來存放它的返回值。還定義一個指向線程ID的DWORD值dwThreadId。然後我們就可以用CreateThread函數來創建我們的線程了,CreateThread函數有六個參數分別是
  LPSECURITY_ATTRIBUTES lpThreadAttributes,  // pointer to security attributes
  DWORD dwStackSize,                         // initial thread stack size
  LPTHREAD_START_ROUTINE lpStartAddress,     // pointer to thread function
  LPVOID lpParameter,                        // argument for new thread
  DWORD dwCreationFlags,                     // creation flags
  LPDWORD lpThreadId                         // pointer to receive thread ID
其中第一個參數我們設置爲NULL,使這個句柄不能被繼承;第二個參數設置爲0,使用默認的堆棧大小;第三個參數爲線程函數的起始地址,也就是線程函數的函數名;第四個參數爲NULL,沒有值要傳遞給線程函數;第五個參數爲0,創建好之後馬上讓線程運行;第六個參數設置爲指向線程ID的地址。創建好線程之後,線程函數進行初始化之類的操作,主函數繼續執行,此時可以輸出被創建線程的ID。我們在主函數中用WaitForSingleObject函數來等待線程函數變成受信(signaled)狀態,它的兩個參數分別是
  HANDLE hHandle,        // handle to object to wait for
  DWORD dwMilliseconds   // time-out interval in milliseconds
第一參數爲線程函數的句柄,第二個參數設置爲INFINITE,等待線程一直執行完。在程序的最後還要記得用CloseHandle函數關閉線程,這樣主函數就寫完了。

      在線程函數裏面我們可以簡單地做一些工作,比如設置一個循環,讓它輸出一定的信息等。源程序如下:
#include <windows.h>
#include <iostream.h>
DWORD WINAPI ThreadFunc(HANDLE Thread)
{
 int i;
 for(i=0;i<10;i++)
 {
  cout<<"A new thread has created!"<<endl;
 }
 return 0;
}

int main(int argc,char* argv[])
{
 HANDLE Thread;
 DWORD dwThreadId;
 Thread=::CreateThread
  (NULL,0,ThreadFunc,NULL,0,&dwThreadId);
 cout<<"The new thread ID is :"<<dwThreadId<<endl;
 ::WaitForSingleObject(Thread,INFINITE);
 ::CloseHandle(Thread);
 return 0;
}

在Window xp sp2&VC++ 6.0環境下編譯通過。

 


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