欧美性猛交XXXX免费看蜜桃,成人网18免费韩国,亚洲国产成人精品区综合,欧美日韩一区二区三区高清不卡,亚洲综合一区二区精品久久

打開(kāi)APP
userphoto
未登錄

開(kāi)通VIP,暢享免費電子書(shū)等14項超值服

開(kāi)通VIP
線(xiàn)程的使用
線(xiàn)程的使用

1.創(chuàng )建簡(jiǎn)單的線(xiàn)程;
在視圖類(lèi)的鼠標的消息映射函數中加入:
    AfxBeginThread((AFX_THREADPROC)TestThread,this);
然后在視圖類(lèi)中加入線(xiàn)程的入口函數:
UINT TestThread(LPVOID pParam)
{
    AfxMessageBox("這是一個(gè)測試工作線(xiàn)程的對話(huà)框");
    return 0;
}
函數說(shuō)明:
CWinThread* AfxBeginThread( AFX_THREADPROC pfnThreadProc, LPVOID pParam, int nPriority = THREAD_PRIORITY_NORMAL, UINT nStackSize = 0, DWORD dwCreateFlags = 0, LPSECURITY_ATTRIBUTES lpSecurityAttrs = NULL );
CWinThread* AfxBeginThread( CRuntimeClass* pThreadClass, int nPriority = THREAD_PRIORITY_NORMAL, UINT nStackSize = 0, DWORD dwCreateFlags = 0, LPSECURITY_ATTRIBUTES lpSecurityAttrs = NULL );
PfnThreadProc:
    指向工作者線(xiàn)程的控制函數,不能是NULL,函數的定義必須如下:
UINT MyControllingFunction( LPVOID pParam );
PThreadClass:CwinThread的RUNTIME_CLASS對象.
PParam:傳遞給控制函數的參數.
Npriority:線(xiàn)程的優(yōu)先級,可以用函數
BOOL SetThreadPriority(
  HANDLE hThread, // handle to the thread
  int nPriority   // thread priority level
);來(lái)設定
nStackSize:堆棧的大小,如果為0,就和創(chuàng )建的主線(xiàn)程一樣的大小.
DwCreateFlags:創(chuàng )建線(xiàn)程時(shí)的附加標志,可以為CREATE_SUSPENDED,代表掛起線(xiàn)程,直到調用DWORD ResumeThread( );函數時(shí)才執行,為0,表示立即執行.
LpSecurityAttrs:指向一個(gè)SECURITY_ATTRIBUTES描述線(xiàn)程的安全性,如果與主線(xiàn)程一樣的安全屬性,可以為NULL.
另外可以用CwinThread類(lèi)的成員函數
BOOL CreateThread( DWORD dwCreateFlags = 0, UINT nStackSize = 0, LPSECURITY_ATTRIBUTES lpSecurityAttrs = NULL );來(lái)創(chuàng )建一個(gè)線(xiàn)程,具體的參數和上面一樣.
還可以用API來(lái)創(chuàng )建線(xiàn)程:
HANDLE 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
);
DWORD WINAPI YourThreadFunc(LPVOIDlpvThreadParm);
lpThreadId:32位標示符,用來(lái)接收線(xiàn)程的標示
函數返回的都是創(chuàng )建線(xiàn)程的句柄.
2.如何結束一個(gè)線(xiàn)程:
void AfxEndThread( UINT nExitCode );//結束當前正在運行的線(xiàn)程.
NExitCode:為線(xiàn)程退出代碼.
BOOL TerminateThread(
  HANDLE hThread,    // handle to the thread
  DWORD dwExitCode   // exit code for the thread
);
如果線(xiàn)程調用了VOID ExitThread(UINTfuExitCode);也可以終止

3.如何取得線(xiàn)程的退出代碼;
使用函數
BOOL GetExitCodeThread(
  HANDLE hThread,      // handle to the thread
  LPDWORD lpExitCode   // address to receive termination status
);
4.設置線(xiàn)程的優(yōu)先級;
BOOL SetThreadPriority(
  HANDLE hThread, // handle to the thread
  int nPriority   // thread priority level
);
nPriority;線(xiàn)程的優(yōu)先級,有:THREAD_PRIORITY_ABOVE_NORMAL,THREAD_PRIORITY_BELOW_NORMAL,THREAD_PRIORITY_HIGHEST,THREAD_PRIORITY_IDLE,THREAD_PRIORITY_LOWEST,THREAD_PRIORITY_NORMAL,THREAD_PRIORITY_TIME_CRITICAL具體的函數參見(jiàn)MSDN。
在上面創(chuàng )建的工作者線(xiàn)程中我們可以這樣設置優(yōu)先級:
    SetThreadPriority(GetCurrentThread(),THREAD_PRIORITY_HIGHEST);//設置比通常高兩個(gè)點(diǎn)
5.如何創(chuàng )建多線(xiàn)程多任務(wù)。
可以調用利用上面的線(xiàn)程創(chuàng )建函數,傳遞給同一個(gè)線(xiàn)程函數不同的參數,也可以開(kāi)始另外一個(gè)線(xiàn)程。
6.掛起和恢復線(xiàn)程:
先前我提到過(guò)可以創(chuàng )建掛起狀態(tài)的線(xiàn)程(通過(guò)傳遞CREATE_SUSPENDED標志給函數CreateThread來(lái)實(shí)現)。當你這樣做時(shí),系統創(chuàng )建指定線(xiàn)程的核心對象,創(chuàng )建線(xiàn)程的棧,在CONTEXT結構中初始化線(xiàn)程CPU注冊成員。然而,線(xiàn)程對象被分配了一個(gè)初始掛起計數值1,這表明了系統將不再分配CPU去執行線(xiàn)程。要開(kāi)始執行一個(gè)線(xiàn)程,一個(gè)線(xiàn)程必須調用ResumeThread并傳遞給它調用CreateThread時(shí)返回的線(xiàn)程句柄。
DWORD ResumeThread(HANDLE hThread);
一個(gè)線(xiàn)程可以被掛起多次。如果一個(gè)線(xiàn)程被掛起3次,則該線(xiàn)程在它被分配CPU之前必須被恢復3次。除了在創(chuàng )建線(xiàn)程時(shí)使用CREATE_SUSPENDED標志,你還可以用SuspendThread函數掛起線(xiàn)程。
DWORDSuspendThread(HANDLE hThread);
7.線(xiàn)程同步對象的使用;
同步對象有:Critical_section(臨界區),Event(事件),Mutex(互斥對象),Semaphores(信號量)。都有相應的API創(chuàng )建函數和MFC類(lèi),同步對象可以處于兩種狀態(tài):信號狀態(tài)(signal state)或非信號狀態(tài),當一個(gè)線(xiàn)程與某個(gè)對象相關(guān)聯(lián)時(shí),若該對象處于非信號狀態(tài),則要等到其變成信號狀態(tài)線(xiàn)程才能繼續執行。
WIN32 API提供了等待命令WaitForSingleObject和WaitForMutipleObjects:
  DWORD WaitForSingleObject(
                HANDLE hObject,                         // 要等待的對象句柄
                DWORD dwMilliseconds);  // 最大等待時(shí)間(毫秒)
        DWORD WaitforMultipleObjects(
                DWORD dwNumObjects,             // 要等待的對象數
                LPHANDLE lpHandles,             // 對象句柄數組
                BOOL bWaitAll,               // 是否等待所有對象都有信號才返回
                DWORD dwMilliseconds);  // 最大等待時(shí)間
如果在指定時(shí)間內對象達到 信號狀態(tài)則返回WAIT_OBJECT_0,超時(shí)返回WAIT_TIMEOUT,出錯返回 WAIT_FAILED。對于互斥量、信號量和自動(dòng)重置(auto-reset)事件對象,等待成功 時(shí)將它們改成非信號狀態(tài)(信號量計數器減1),以實(shí)現對象的互斥訪(fǎng)問(wèn)。
件:jianuangzhiganhue
8.事件:
“事件”——一個(gè)允許一個(gè)事件發(fā)生時(shí)線(xiàn)程通知另一個(gè)線(xiàn)程的同步對象。在一個(gè)線(xiàn)程需要了解何時(shí)執行任務(wù)時(shí),事件是十分有用的。
CEvent對象有兩種類(lèi)型:自動(dòng)和手工。一個(gè)手工CEvent對象存在于由ResetEvent 或SetEvent設置的狀態(tài)中,直到另一個(gè)函數被調用。一個(gè)自動(dòng)CEvent對象在至少一個(gè)線(xiàn)程被釋放后自動(dòng)返回一個(gè)無(wú)標記(無(wú)用的)狀態(tài)。
CEvent( BOOL bInitiallyOwn = FALSE, BOOL bManualReset = FALSE, LPCTSTR lpszName = NULL, LPSECURITY_ATTRIBUTES lpsaAttribute = NULL );
BInitiallyOwn;如果為T(mén)RUE, CMultilock or CsingleLock對象就可以使用,為FALSE,線(xiàn)程就必須等到直到所需的資源被釋放.
BManualReset:為T(mén)RUE,設置為手動(dòng)復位事件對象,為FALSE,設置為自動(dòng)復位事件對象.
LpszName:事件對象的名稱(chēng),不能指定一個(gè)已經(jīng)存在的對象
LpsaAttribute:事件對象的安全屬性
與同步對象相關(guān)的多個(gè)同步訪(fǎng)問(wèn)對象CMultilock 和單個(gè)同步訪(fǎng)問(wèn)對象 CsingleLock對象.
CSingleLock( CSyncObject* pObject, BOOL bInitialLock = FALSE );
PObject:指向一個(gè)要處理的同步對象
BinitialLock:指定是否初始的時(shí)候就嘗試訪(fǎng)問(wèn)對象。
CMultiLock( CSyncObject* ppObjects[ ], DWORD dwCount, BOOL bInitialLock = FALSE );
DwCount:指定同步對象的個(gè)數,必須大于0。
下面簡(jiǎn)單介紹他們的應用:
調用此成員函數構造一個(gè)已命名或未命名的CEvent對象。要訪(fǎng)問(wèn)或釋放一個(gè)CEvent對象,可建立一個(gè)CSingleLock或CMultiLock對象并調用其Lock和Unlock成員函數。要將CEvent對象的狀態(tài)改為已標記(無(wú)須等待的線(xiàn)程),可調用SetEvent或PulseEvent。要設置一個(gè)CEvent對象為無(wú)標記(必須等待的線(xiàn)程),可調用ResetEvent。
可以在你的線(xiàn)程開(kāi)始設置CEvent::SetEvent,其他線(xiàn)程使用CSingleLock::Lock來(lái)等待你線(xiàn)程處理結束。當你的線(xiàn)程處理完畢,使用CEvent::ResetEvent清除事件,其他程序就可以繼續執行了。
API函數:
    HANDLE CreateEvent(
                LPSECURITY_ATTRIBUTES lpsa,     // 安全屬性指針,Win98忽略
                BOOL bManualRest,              // 是否手動(dòng)重置(manual-reset)
                BOOL bInitialState,            // 初始狀態(tài)是否為信號狀態(tài)
                LPCTSTR lpName);              // 對象名字符串指針
自動(dòng)重置(auto-reset)事件和手動(dòng)重置(manual-reset)事件,這由CreateEvent()的第二個(gè)參數指定。對于自動(dòng)重置事件,WaitForSingleObject()和 WaitForMultipleObjects()會(huì )等待事件到信號狀態(tài),隨后又自動(dòng)將其重置為非信號狀 態(tài),這樣保證了等待此事件的線(xiàn)程中只有一個(gè)會(huì )被喚醒。而手動(dòng)重置事件需要用戶(hù)調用ResetEvent()才會(huì )重置事件??赡苡腥舾蓚€(gè)線(xiàn)程在等待同一事件,這樣當事件變 為信號狀態(tài)時(shí),所有等待線(xiàn)程都可以運行了。 SetEvent()函數用來(lái)把事件對象設置成信號狀態(tài),ResetEvent()把事件對象重置成非信號狀態(tài),兩者均需事件對象句柄作參數。
9.臨界區
同一時(shí)刻只允許一個(gè)線(xiàn)程存取資源或代碼區。臨界區在控制一次只有一個(gè)線(xiàn)程修改數據或其它的控制資源時(shí)非常有用。在運行性能比較重要而且資源不會(huì )跨進(jìn)程使用時(shí),建議采用臨界區代替信號燈。有關(guān)在MFC中使用信號燈的詳細信息,請參閱CMutex。使用CCriticalSection對象之前,需要構造它。在構造函數返回后,就可以使用臨界區了。在使用完之后要調用UnLock函數。存取由CCriticalSection控制的資源時(shí),要在資源的存取函數中定義一個(gè)CSingleLock型的變量。然后調用加鎖對象的Lock成員函數(如CSingleLock::Lock)。此時(shí),調用的線(xiàn)程要么獲得對資源的存取權,要么等待他人釋放資源等待加鎖,或者等待他人釋放資源,但又因為超時(shí)而加鎖失敗。這樣就保證了一次只有一個(gè)線(xiàn)程在存取臨界資源。釋放資源只需調用成員函數UnLock(例如CSingleLock:Unlock),或讓鎖對象在作用范圍之外。
此外,可以單獨地建立一個(gè)CCriticalSection對象,并在存取臨界資源之前顯式地存取它。這種方式有助于保持代碼的清晰,但是更容易出錯,因為要記住在存取臨界資源前加鎖,存取之后開(kāi)鎖。
構造函數:CCriticalSection ( );
成員函數:BOOL Lock( ); BOOL Lock( DWORD dwTimeout ); 本函數用于取得對臨界區對象的存取權。Lock是一個(gè)成塊性的操作,直到取得臨界區對象的存取權才返回。
virtual BOOL UnLock( ); 如果臨界區是被本線(xiàn)程占用的并且開(kāi)鎖成功,則返回非零值。否則為0。本函數釋放線(xiàn)程占用的CCriticalSection對象。如果CCriticalSection是單獨使用的,在獨占使用完臨界資源以后,應盡快調用UnLock開(kāi)鎖。如果使用了CSingleLock對象,CCriticalSection::Unlock將會(huì )在它的成員函數Unlock中調用。
API函數:
CRITICAL_SECTION cs; 然后初始化,調用下面函數(參數為空對象的指針):
     VOID InitializeCriticalSection(LPCRITICAL_SECTION lpcs);
     VOID EnterCriticalSection(LPCRITICAL_SECTION lpcs); 進(jìn)入和離開(kāi)臨界區分別調用函數:
     VOID LeaveCriticalSection(LPCRITICAL_SECTION lpcs);
     VOID DeleteCriticalSection(LPCRITICAL_SECTION lpcs); 刪除臨界區對象用:
10. Mutex(互斥對象)
它為一個(gè)同步對象,允許某線(xiàn)程共同訪(fǎng)問(wèn)同一資源。在僅僅一個(gè)線(xiàn)程被允許用于修改數據或其它被控制的資源時(shí)。
一種使用CMutex 對象的方法就是一個(gè)CMutex類(lèi)型的變量,將其作為你希望控制類(lèi)的數據成員。在被控制對象的構造過(guò)程中,若互斥對象最初擁有了互斥對象的名稱(chēng)或期待的安全屬性,那么就調用CMutex數據成員指定的構造函數,以這種方式訪(fǎng)問(wèn)由CMutex 對象控制的資源,首先要在資源訪(fǎng)問(wèn)的成員函數中創(chuàng )建CSingleLock類(lèi)型或CMultiLock類(lèi)型的變量。然后調用封鎖對象的Lock成員函數(例如, CSingleLock::Lock)。這樣,你的線(xiàn)程要么就獲得資源的訪(fǎng)問(wèn)權,以等待將要釋放的資源,并獲取訪(fǎng)問(wèn)權,要么就等待將要釋放的資源,當超時(shí)后,返回失敗。在任何一種情況下,都可以在線(xiàn)程安全的模式下訪(fǎng)問(wèn)資源。若要釋放這些資源,使用封鎖對象的Unlock成員函數(例如, CSingleLock::Unlock),或允許封鎖對象越界。
CMutex( BOOL bInitiallyOwn = FALSE, LPCTSTR lpszName = NULL,LPSECUR-ITY_ATTRIBUTES lpsaAttribute = NULL );
BInitiallyOwn:指定是否創(chuàng )建了CMutex 對象的線(xiàn)程最初擁有由互斥對象控制資源的訪(fǎng)問(wèn)權。
lpszName:CMutex 對象的名稱(chēng)。若其它的互斥對象由同樣的名稱(chēng),那么必須提供lpszName,以便對象能夠通過(guò)進(jìn)程邊界。若該值為NULL,那么互斥對象將沒(méi)有命名。若該名稱(chēng)匹配已經(jīng)存在的互斥對象,那么構造函數將創(chuàng )建一個(gè)參考互斥對象名稱(chēng)的新CMutex 對象。若該名稱(chēng)匹配已存在的不是互斥對象的同步對象,那么構造過(guò)程將失敗。
LpsaAttribute:對象的安全性
API函數:

HANDLE CreateMutex(
                LPSECURITY_ATTRIBUTES lpsa,     // 安全屬性指針
                BOOL bInitialOwner,             // TR UE表示線(xiàn)程將擁有該信號量
                LPCTSTR lpName);                // 對象名
在別的進(jìn)程中可以用相同的互斥量名調用CreateMutex()和 OpenMutex()來(lái)打開(kāi)該對象,這樣互斥量就可用于多個(gè)進(jìn)程中,線(xiàn)程通過(guò)WaitForSingleObject()和WaitForMultipleObject()來(lái)等待一個(gè)互斥量,用ReleaseMutex()來(lái)釋放一個(gè)互斥量。
11.Semaphores(信號量)
    一個(gè)CSemaphore類(lèi)對象代表一個(gè)“信號”一個(gè)同步對象,它允許有限數目的線(xiàn)程在一個(gè)或多個(gè)進(jìn)程中訪(fǎng)問(wèn)同一個(gè)資源。一個(gè)Semaphore對象保持了對當前訪(fǎng)問(wèn)某一指定資源的線(xiàn)程的計數。
對于一個(gè)只能支持有限數目用戶(hù)的共享資源來(lái)說(shuō),CSemaphore是很有用的。
CSemaphore對象的當前計數是還可以允許的其它用戶(hù)的數目。當這個(gè)計數達到零的時(shí)候,所有對這個(gè)由CSemaphore對象控制的資源的訪(fǎng)問(wèn)嘗試都將被插入到一個(gè)系統隊列中等待,直到它們的時(shí)間用完或計數值不再為零。這個(gè)被控制的資源可以同時(shí)接受訪(fǎng)問(wèn)的最大用戶(hù)數目是在CSemaphore對象的構造期間被指定的。
使用CSemaphore對象的另一種方法是,將一個(gè)CSemaphore類(lèi)型的變量添加到你想要控制的類(lèi)中作為一個(gè)數據成員。在被控制對象的構造期間,調用CSemaphore數據成員的構造函數來(lái)指定訪(fǎng)問(wèn)計數的初始值,訪(fǎng)問(wèn)計數的最大值,信號的名字(如果它要在整個(gè)進(jìn)程中使用),以及需要的安全標志。要訪(fǎng)問(wèn)由CSemaphore對象用這種方式控制的資源,首先要在你的資源的訪(fǎng)問(wèn)成員函數中創(chuàng )建一個(gè)CSingleLock類(lèi)型或CMultiLock類(lèi)型的變量。然后調用加鎖對象的Lock成員函數(例如,CSingleLock::Lock)。這時(shí),你的線(xiàn)程將達到對資源的訪(fǎng)問(wèn),等待資源被釋放并訪(fǎng)問(wèn)它,或者是在等待資源被釋放的過(guò)程中超過(guò)了時(shí)間,對資源的訪(fǎng)問(wèn)失敗。不管是哪一種情況,你的資源都是以一種線(xiàn)程安全(thread-safe)方式被訪(fǎng)問(wèn)的。要釋放資源,可以使用加鎖對象的Unlock成員函數(例如,CSingleLock::Unlock),或者是讓加鎖對象超越范圍。
CSemaphore( LONG lInitialCount = 1, LONG lMaxCount = 1, LPCTSTR pstrName= NULL,       LPSECURITY_ATTRIBUTES lpsaAttributes = NULL );
LInitialCount:信號的初始使用計數。必須是大于或等于0,并且小于或等于lMaxCount。
LMaxCount:信號的使用計數的最大值。必須大于0。
PstrName:信號的名字。如果此信號將在整個(gè)進(jìn)程中被訪(fǎng)問(wèn),則必須提供這個(gè)名字。如果是NULL,則對象將是沒(méi)有名字的。如果這個(gè)名字與一個(gè)已經(jīng)存在的信號的名字一樣,則構造函數創(chuàng )建一個(gè)新的CSemaphore對象,此對象引用具有這個(gè)名字的對象。如果這個(gè)名字與一個(gè)已經(jīng)存在的但不是一個(gè)信號的同步對象的名字一樣,則構造函數會(huì )失敗。
API使用:
HANDLE CreateSemaphore(
                LPSECURITY_ATTRIBUTES lpSecAttr,        // 安全屬性指針
                LONG InitialCoutn,                       // 初始信號量數目
                LONG lMaxCount,                        // 允許的最大信號量數目
                LPCTSTR lpszSemName);                 // 信號量對象名指針
當信號量數目大于0時(shí),就處于信號狀態(tài)。若lpszSemName參數為NULL時(shí),信號量局限于一個(gè)進(jìn)程的線(xiàn)程中;若給予一個(gè)字符串對象名,則其它進(jìn)程也可以使 用該信號量。別的進(jìn)程中可以在調用CreateSemaphore()和OpenSemaphore()時(shí)把這個(gè)字符串名作參數,以打開(kāi)該信號量,這樣可以實(shí)現多個(gè)進(jìn)程間的同步。WaitForSingleObject()和WaitForMultipleObjects()來(lái)等待一個(gè)信號量。當完成同步任務(wù)時(shí),線(xiàn)程應用ReleaseSemaphore()來(lái)釋放信號量:
BOOL ReleaseSemaphore(HANDLE hSema, LONG lReleaseCount, LPLONG  lpPrevious);
12.用戶(hù)界面線(xiàn)程的創(chuàng )建:
創(chuàng )建用戶(hù)界面線(xiàn)程時(shí),必須首先從 CWinThread 派生類(lèi)。必須使用 DECLARE_DYNCREATE 和 IMPLEMENT_DYNCREAT宏聲明并實(shí)現此類(lèi)。用戶(hù)界面線(xiàn)程通常用于處理用戶(hù)輸入和響應用戶(hù)事件。
13.進(jìn)程的創(chuàng )建和終止;
調用CreateProcess函數創(chuàng )建新的進(jìn)程,運行指定的程序。CreateProcess的原型如下:
BOOL CreateProcess(
LPCTSTR lpApplicationName,
LPTSTR lpCommandLine,
LPSECURITY_ATTRIBUTES lpProcessAttributes,
LPSECURITY_ATTRIBUTES lpThreadAttributes,
BOOL bInheritHandles,
DWORD dwCreationFlags,
LPVOID lpEnvironment,
LPCTSTR lpCurrentDirectory,
LPSTARTUPINFO lpStartupInfo,
LPPROCESS_INFORMATION lpProcessInformation
);
其中:
lpApplicationName指向包含了要運行模塊名字的字符串。
lpCommandLine指向命令行字符串。
lpProcessAttributes描述進(jìn)程的安全性屬性,NT下有用。
lpThreadAttributes描述進(jìn)程初始線(xiàn)程(主線(xiàn)程)的安全性屬性,NT下有用。
bInHeritHandles表示子進(jìn)程(被創(chuàng )建的進(jìn)程)是否可以繼承父進(jìn)程的句柄??梢岳^承的句柄有線(xiàn)程句柄、有名或無(wú)名管道、互斥對象、事件、信號量、映像文件、普通文件和通訊端口等;還有一些句柄不能被繼承,如內存句柄、DLL實(shí)例句柄、GDI句柄、URER句柄等等。
子進(jìn)程繼承的句柄由父進(jìn)程通過(guò)命令行方式或者進(jìn)程間通訊(IPC)方式由父進(jìn)程傳遞給它。
dwCreationFlags表示創(chuàng )建進(jìn)程的優(yōu)先級類(lèi)別和進(jìn)程的類(lèi)型。創(chuàng )建進(jìn)程的類(lèi)型分控制臺進(jìn)程、調試進(jìn)程等;優(yōu)先級類(lèi)別用來(lái)控制進(jìn)程的優(yōu)先級別,分Idle、Normal、High、Real_time四個(gè)類(lèi)別。
lpEnviroment指向環(huán)境變量塊,環(huán)境變量可以被子進(jìn)程繼承。
lpCurrentDirectory指向表示當前目錄的字符串,當前目錄可以繼承。
lpStartupInfo指向StartupInfo結構,控制進(jìn)程的主窗口的出現方式。
lpProcessInformation指向PROCESS_INFORMATION結構,用來(lái)存儲返回的進(jìn)程信息。
從其參數可以看出創(chuàng )建一個(gè)新的進(jìn)程需要指定什么信息。
從上面的解釋可以看出,一個(gè)進(jìn)程包含了很多信息。若進(jìn)程創(chuàng )建成功的話(huà),返回一個(gè)進(jìn)程信息結構類(lèi)型的指針。進(jìn)程信息結構如下:
typedef struct _PROCESS_INFORMATION {
HANDLE hProcess;
HANDLE hThread;
DWORD dwProcessId;
DWORD dwThreadId;
}PROCESS_INFORMATION;
進(jìn)程信息結構包括進(jìn)程句柄,主線(xiàn)程句柄,進(jìn)程ID,主線(xiàn)程ID。
進(jìn)程的終止
進(jìn)程在以下情況下終止:
調用ExitProcess結束進(jìn)程;
進(jìn)程的主線(xiàn)程返回,隱含地調用ExitProcess導致進(jìn)程結束;
進(jìn)程的最后一個(gè)線(xiàn)程終止;
調用TerminateProcess終止進(jìn)程。
當要結束一個(gè)進(jìn)程時(shí),發(fā)送WM_QUIT消息給主窗口,當然也可以從它的任一線(xiàn)程調用ExitProcess。
本站僅提供存儲服務(wù),所有內容均由用戶(hù)發(fā)布,如發(fā)現有害或侵權內容,請點(diǎn)擊舉報。
打開(kāi)APP,閱讀全文并永久保存 查看更多類(lèi)似文章
猜你喜歡
類(lèi)似文章
同步
多線(xiàn)程學(xué)習筆記
第八章 MFC的進(jìn)程和線(xiàn)程
多線(xiàn)程與串行通信
線(xiàn)程的基礎知識
VC 中進(jìn)程與多進(jìn)程管理的方法
更多類(lèi)似文章 >>
生活服務(wù)
分享 收藏 導長(cháng)圖 關(guān)注 下載文章
綁定賬號成功
后續可登錄賬號暢享VIP特權!
如果VIP功能使用有故障,
可點(diǎn)擊這里聯(lián)系客服!

聯(lián)系客服

欧美性猛交XXXX免费看蜜桃,成人网18免费韩国,亚洲国产成人精品区综合,欧美日韩一区二区三区高清不卡,亚洲综合一区二区精品久久