免费高清特黄a大片,九一h片在线免费看,a免费国产一级特黄aa大,国产精品国产主播在线观看,成人精品一区久久久久,一级特黄aa大片,俄罗斯无遮挡一级毛片

分享

多線程編程淺析(1)——概述

 Jugg_Bug 2013-09-11

  線程,是在進程內部又細分的一個執(zhí)行單元,他們都是由操作系統(tǒng)來進行劃分控制的。系統(tǒng)創(chuàng)建好進程后,實際上就啟動執(zhí)行了該進程的主執(zhí)行線程,主執(zhí)行線程以函數(shù)地址形式,比如說main或WinMain函數(shù),將程序的啟動點提供給Windows系統(tǒng)。主執(zhí)行線程終止了,進程也就隨之終止。每一個進程至少有一個主執(zhí)行線程,它無需由用戶去主動創(chuàng)建,是由系統(tǒng)自動創(chuàng)建的。用戶根據(jù)需要在應用程序中創(chuàng)建其它線程,多個線程并發(fā)地運行于同一個進程中。一個進程中的所有線程都在該進程的虛擬地址空間中,共同使用這些虛擬地址空間、全局變量和系統(tǒng)資源,所以線程間的通訊非常方便,多線程技術的應用也較為廣泛。
 
 我們要操作線程,就必須依賴于操作系統(tǒng)提供的接口。下面我們來簡要介紹一下操作系統(tǒng)提供的跟線程相關的API函數(shù):

HANDLE CreateThread(LPSECURITY_ATTRIBUTES lpThreadAttributes,
                 DWORD dwStackSize,
                 LPTHREAD_START_ROUTINE lpStartAddress,
                 LPVOID lpParameter,
                 DWORD dwCreationFlags,
                 LPDWORD lpThreadId);

該函數(shù)在其調用進程的進程空間里創(chuàng)建一個新的線程,并返回已建線程的句柄,其中各參數(shù)說明如下:
lpThreadAttributes:指向一個 SECURITY_ATTRIBUTES 結構的指針,該結構決定了線程的安全屬性,一般置為 NULL;
dwStackSize:指定了線程的堆棧深度,一般都設置為0;
lpStartAddress:表示新線程開始執(zhí)行時代碼所在函數(shù)的地址,即線程的起始地址。一般情況為(LPTHREAD_START_ROUTINE)ThreadProcess,ThreadProcess 是線程函數(shù)名;
lpParameter:指定了線程執(zhí)行時傳送給線程的32位參數(shù),即線程函數(shù)的參數(shù);
dwCreationFlags:控制線程創(chuàng)建的附加標志,可以取兩種值。如果該參數(shù)為0,線程在被創(chuàng)建后就會立即開始執(zhí)行;如果該參數(shù)為CREATE_SUSPENDED,則系統(tǒng)產生線程后,該線程處于掛起狀態(tài),并不馬上執(zhí)行,直至函數(shù)ResumeThread被調用;
lpThreadId:該參數(shù)返回所創(chuàng)建線程的ID;
如果創(chuàng)建成功則返回線程的句柄,否則返回NULL。

 

DWORD SuspendThread(HANDLE hThread);

該函數(shù)用于掛起指定的線程,如果函數(shù)執(zhí)行成功,則線程的執(zhí)行被終止。

 

DWORD ResumeThread(HANDLE hThread);

該函數(shù)用于結束線程的掛起狀態(tài),執(zhí)行線程。

 

VOID ExitThread(DWORD dwExitCode);

該函數(shù)用于線程終結自身的執(zhí)行,主要在線程的執(zhí)行函數(shù)中被調用。其中參數(shù)dwExitCode用來設置線程的退出碼。
 

BOOL TerminateThread(HANDLE hThread,DWORD dwExitCode);

一般情況下,線程運行結束之后,線程函數(shù)正常返回,但是應用程序可以調用TerminateThread強行終止某一線程的執(zhí)行。各參數(shù)含義如下:
hThread:將被終結的線程的句柄;
dwExitCode:用于指定線程的退出碼。
使用TerminateThread()終止某個線程的執(zhí)行是不安全的,可能會引起系統(tǒng)不穩(wěn)定;雖然該函數(shù)立即終止線程的執(zhí)行,但并不釋放線程所占用的資源。因此,一般不建議使用該函數(shù)。

BOOL PostThreadMessage(DWORD idThread,
   UINT Msg,
   WPARAM wParam,
   LPARAM lParam);

該函數(shù)將一條消息放入到指定線程的消息隊列中,并且不等到消息被該線程處理時便返回。
idThread:將接收消息的線程的ID;
Msg:指定用來發(fā)送的消息;
wParam:同消息有關的字參數(shù);
lParam:同消息有關的長參數(shù);
調用該函數(shù)時,如果即將接收消息的線程沒有創(chuàng)建消息循環(huán),則該函數(shù)執(zhí)行失敗。


下面我給出一個簡單的建立線程的例子:
#include "stdafx.h"
#include 
"windows.h"
#include 
"stdio.h"

void ThreadProcess()
{
    
for(int i=0; i<6; i++)
    
{
        Sleep(
1000);
        printf(
"Sub Thread Tick %d! \n",i*1000);
    }

    printf(
"Exit Sub Thread!\n");
    
}


int _tmain(int argc, _TCHAR* argv[])
{
    HANDLE hThread;
    DWORD ThreadID;
    hThread
=CreateThread(NULL,
                     
0,
                     (LPTHREAD_START_ROUTINE)ThreadProcess,
                     NULL,
                     
0,
                     
&ThreadID);
    
    
for(int i=0; i<10; i++)
    
{
        Sleep(
600);
        printf(
"Main Thread Tick %d! \n", i*600);
    }

    printf(
"Main Thread Loop Finished! \n");
    system(
"pause");
    
return 0;
}

    本站是提供個人知識管理的網(wǎng)絡存儲空間,所有內容均由用戶發(fā)布,不代表本站觀點。請注意甄別內容中的聯(lián)系方式、誘導購買等信息,謹防詐騙。如發(fā)現(xiàn)有害或侵權內容,請點擊一鍵舉報。
    轉藏 分享 獻花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多