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是可以管理執行緒的. 佇列