1. 程式人生 > >VS C++ 執行緒篇之一建立執行緒

VS C++ 執行緒篇之一建立執行緒

建立執行緒

建立執行緒方法一、

HANDLE WINAPI CreateThread(

  LPSECURITY_ATTRIBUTES lpThreadAttributes,       // 執行緒安全屬性
  SIZE_T dwStackSize,                                                // 執行緒堆疊大小
  LPTHREAD_START_ROUTINE lpStartAddress,         // 執行緒函式地址
  LPVOID lpParameter,                                              // 執行緒函式引數
  DWORD dwCreationFlags,                                      // 指定執行緒是否立即啟動
  LPDWORD lpThreadId                                            // 儲存執行緒ID號
);

        執行緒核心物件就是一個包含了執行緒狀態資訊的資料結構。每次對CreateThread 的成功呼叫,系統都會在內部為其分配一個核心物件。
        執行緒上下文反應了執行緒上次執行的暫存器狀態,來保證執行緒之間切換(即還原現場)。
        計數器,呼叫一次OpenThread(CreateThread ),計數器加1,CloseThread(CloseHandle)計數器減一。當計數器值為0時,沒有執行緒使用該核心物件,系統收回記憶體。計數器的初始值是2(主執行緒是1,建立的執行緒是2)。

建立執行緒方法二、C++底部的,並不是Windows標準API,建立執行緒函式,該函底層呼叫CreateThread。

#include <process.h>
uintptr_t _beginthreadex( 
   void *security,// 執行緒安全屬性
   unsigned stack_size,  // 執行緒堆疊大小
   unsigned ( *start_address )( void * ),  //執行緒函式地址
   void *arglist,  //傳遞給執行緒函式的引數
   unsigned initflag, // 指定執行緒是否立即啟動
   unsigned *thrdaddr  // 儲存執行緒ID號
);

安全屬性

typedef struct _SECURITY_ATTRIBUTES {  

	DWORD nLength;  
	LPVOID lpSecurityDescriptor;  
	BOOL bInheritHandle;                //設定該控制代碼可以繼承
} SECURITY_ATTRIBUTES,  
  *PSECURITY_ATTRIBUTES,  
  *LPSECURITY_ATTRIBUTES;

執行緒終止

執行緒函式退出。

        執行緒使用的堆疊被釋放。
        dwExitCode設定為執行緒函式的返回值。
        遞減核心中的code值,讓核心的引用計數減一。

// 結束執行緒呼叫,終止自己
VOID WINAPI ExitThread(
  __in DWORD dwExitCode	  // 執行緒結束時的退出碼
);
// 由當前執行緒終止其他執行緒
BOOL WINAPI TerminateThread(
  __in_out HANDLE hThread,  // 終止的執行緒控制代碼
  __in DWORD dwExitCode     // 退出碼
);
// 程序退出
VOID WINAPI ExitProcess(
  __in UINT uExitCode   // 退出碼
);
void _endthreadex( 
   unsigned retval     // 退出碼 
);

例程1:

#include <stdlib.h>
#include <stdio.h>
#include <windows.h>


DWORD WINAPI ThreadProFunc(LPVOID lpParam);

int main(int argc, char **argv)
{
	HANDLE hThread;
	DWORD dwThreadId;
	
	hThread = CreateThread( NULL	// 預設安全屬性
						, NULL		// 預設堆疊大小
						, ThreadProFunc // 執行緒入口地址
						, NULL	//傳遞給執行緒函式的引數
						, 0		// 指定執行緒立即執行
						, &dwThreadId	//執行緒ID號
						);

	for(int i = 0; i < 4; i++) {
		printf("nihao\n");
	}

	CloseHandle(hThread);	//關閉執行緒控制代碼,核心引用計數減一

	system("pause");
	return 0;
}

DWORD WINAPI ThreadProFunc(LPVOID lpParam)
{
	for(int i = 0; i < 4; i++) {
		printf("hello\n");
	}
	return 0;
}

執行結果:

nihao
hello
hello
nihao
hello
nihao
nihao
hello
請按任意鍵繼續. . .


例程2:

#include <stdlib.h>
#include <stdio.h>
#include <windows.h>
#include <process.h>

unsigned int WINAPI ThreadProFunc(void *pParam);

int main(int argc, char **argv)
{
	HANDLE hThread;
	unsigned int threadId;

	hThread = (HANDLE)_beginthreadex(NULL, NULL, ThreadProFunc,NULL, 0, &threadId); 

	for(int i = 0; i < 4; i++) {
		printf("nihao\n");
	}

	CloseHandle(hThread);	//關閉執行緒控制代碼

	system("pause");
	return 0;
}

unsigned int WINAPI ThreadProFunc(void *pParam)
{
	for(int i = 0; i < 4; i++) {
		printf("hello\n");
	}
	return 0;
}

執行結果

nihao
hello
hello
nihao
hello
nihao
nihao
hello
請按任意鍵繼續. . .

相關推薦

VS C++ 執行之一建立執行

建立執行緒建立執行緒方法一、HANDLE WINAPI CreateThread( LPSECURITY_ATTRIBUTES lpThreadAttributes, // 執行緒安全屬性 SIZE_T dwStackSize,

執行程式設計之建立執行(Windows下C++實現)

執行緒概述 理解Windows核心物件 執行緒是系統核心物件之一。在學習執行緒之前,應先了解一下核心物件。核心物件是系統核心分配的一個記憶體塊,該記憶體塊描述的是一個數據結構,其成員負責維護物件的各種資訊。核心物件的資料只能由系統核心來訪問,應用程式無法在記

java 多執行基礎之一:多執行建立執行,狀態管理

import java.lang.Thread.State; public class Calculator implements Runnable {     private int number;     public Calculator(int number) {         this.numb

執行一)執行概念及建立執行

概念定義:執行緒是程序中的一個任務,也叫順序執行流,同時執行一個程序中的多個任務(也就是執行多個順序執行流)就是多執行緒     程式:是作業系統中實現功能的程式碼塊,也叫軟體     程序:正在執行中的程式     多程序:多個程式同

使用執行池來建立執行

1.如何使用執行緒池來建立執行緒? java中提供了一個靜態工廠方法來建立不同的執行緒池:  Executors 通過靜態方法創建出的執行緒都實現了ExecutorService介面。常用的方法包括: newFixedThreadPool(int threads); 建立

java多執行:2 建立執行

如何建立一個多執行緒: Java提供了java.lang.Thread類,這就是執行緒的定義類,包含了:執行緒的優先順序,執行緒id、執行緒狀態等執行緒的基本資訊。 通過Thread類的說明,可以知道建立執行緒的兩種方式:1 extends Thread類,2 implements

執行(一):建立執行的幾種方法

概括來說就是兩種:1、繼承Thread類,重寫run方法,然後start。不推薦這種,因為java的單繼承特性。 2、Thread類的建構函式中可以接受Runnable任務,所以只要是Runnable例項就可以作為引數給Thread 一般有兩種建立Runnable例項的方法(1)實現Runn

執行——初始Linux執行

執行緒模型 執行緒是程式完成一個獨立任務的完整執行序列,即一個可排程的實體。根據執行環境和排程者的身份,執行緒可分為核心執行緒和使用者執行緒。核心執行緒執行在核心空間上由核心排程,使用者執行緒執行在使用者空間上由執行緒庫來排程。一個程序可以有M個核心執行緒、N個使用者執行緒(M&l

Java(三)併發控制5.繼承建立執行和實現建立執行之間的區別

這是使用繼承建立的執行緒 class Person extends Thread { private int num=50; public Person(String name) { super(name); } public void run()

傳統執行技術中建立執行的兩種方式

傳統的執行緒技術中有兩種建立執行緒的方式:一是繼承Thread類,並重寫run()方法;二是實現Runnable介面,覆蓋介面中的run()方法,並把Runnable介面的實現扔給Thread。這兩種方式大部分人可能都知道,但是為什麼這樣玩就可以呢?下面我們來詳細分析一下這兩種方法的來龍去脈。 1. 揭祕Th

Java併發程式設計原理與實戰一(執行狀態及建立執行的多種方式)

一、為什麼要學習併發程式設計 1.發揮多處理的強大能力 2.建模的簡單性 3.非同步事件的簡化處理 4.響應更加靈敏的使用者介面 二、併發的缺點 1.安全性問題 多執行緒環境下 多個執行緒共享一個資源 對資源進行非原子性操作 2.活躍

MFC筆記(四)——多執行程式設計2:建立執行

2.1 CreateThread() (1)函式原型:建立執行緒 HANDLE WINAPI CreateThread( LPSECURITY_ATTRIBUTES lpThreadAttributes, SIZE_T dwStackSize, LPTHREAD_STA

執行之pthread_create建立執行

pthreads定義了一套C程式語言型別、函式、與常量。以pthread.h和一個執行緒庫實現。 資料型別: pthread_t:執行緒控制代碼 pthread_attr_t:執行緒屬性 執行緒操作函式: pthread_create():建立一個執行緒 pthread_e

網路程式設計:服務端處理多個客戶端----多執行實現、建立執行特有資料.

重點集中在用多執行緒實現,建立執行緒特有資料,不會發生資料寫入衝突。實現的功能很簡單,客戶端連線成功後,輸入一個整數,服務端返回它的二進位制形式。客戶端輸入0,則主動退出。三個檔案: duoxianc.c ,主檔案binarykey.c,執行緒執行函式及特有資料建立clien

linux多執行程式設計之一執行資料同步及相關api使用示例

多執行緒的使用在編碼過程中非常常見,如果快速的理解和掌握linux下的多執行緒程式設計呢?下文即將為您揭曉。一.linux多執行緒基本的建立及相關API使用: 1.執行緒的建立: int pthread_create(pthread_t thread, const pthread_attr_t attr,

使用pthread_create建立大量執行時,建立執行失敗,Resource temporarily unavailable的解決辦法

        今天在一個測試程式中使用pthread_create建立了大量執行緒,但是如果執行緒數量增加到400後,就會出現執行緒建立失敗,perror打印出的錯誤原因是:Resource temporarily unavailable。        在網上查了下,原

死磕 java執行系列之建立執行的8種方式

問題 (1)建立執行緒有哪幾種方式? (2)它們分別有什麼運用場景? 簡介 建立執行緒,是多執行緒程式設計中最基本的操作,彤哥總結了一下,大概有8種建立執行緒的方式,你知道嗎? 繼承Thread類並重寫run()方法 public class CreatingThread01 extends Thread

VS C++ 執行之二建立執行(傳遞引數)

例程1:傳遞整型引數#include <stdlib.h> #include <stdio.h> #include <windows.h> DWORD WINAP

VS C++ 執行執行同步

執行緒同步解決        不同執行緒函式的執行順序,進行執行緒協調。  APIDWORD WINAPI WaitForSingleObject( HANDLE hHandle, // 物件控制代

iOS總結-多執行之GCD之一

程序:作業系統資源分配的基本單位   執行緒:任務排程和執行的基本單位 一個程序裡面可以有多個執行緒. GCD自動利用CPU核心(如雙核,四核),會自動管理執行緒的生命週期(建立執行緒,排程任務,銷燬執行緒) 而NSOperation Queue是可以管理執行緒的. 佇列