1. 程式人生 > >C++多執行緒函式CreateThread()詳解

C++多執行緒函式CreateThread()詳解

採用CreateThread()建立多執行緒程式

原創 2012年12月10日 11:44:59
  • 36683

採用CreateThread()建立多執行緒程式

在window環境下,Win32 提供了一系列的API函式來完成執行緒的建立、掛起、恢復、終結以及通訊等工作:

1、主要的函式列表:

序號

函式名

功能

1

CreateThread()

建立一個新執行緒

2

ExitThread()

正常結束一個執行緒的執行

3

TerminateThead()

強制終止一個執行緒的執行

4

ResumeThread()

重啟一個執行緒

5

SuspendThread()

掛起一個執行緒

6

GetExiCodeThread()

得到一個執行緒的退出碼

7

GetThreadPriority()

得到一個執行緒的優先順序

8

SetThreadPriority()

設定一個執行緒的優先順序

9

CloseHandle()

關閉一個執行緒的控制代碼

10

CreateRemoteThread()

再另一個程序中建立一個新執行緒

11

PostThreadMessage()

傳送一條訊息給指定的執行緒

12

GetCurrentThread()

得到當前的執行緒控制代碼

13

GetCurrentThreadId()

得到當前執行緒的ID

14

GetThreadId()

得到指定執行緒的ID

15

WaitForSingleObject()

等待單個物件

16

WaitForMultipleObjects()

等待多個物件

關於多執行緒的API函式還有很多,以上只是列出了一些比較常用的函式,欲知更多函式和函式的使用方法,請參考MSDN或網路資源,在此就不再介紹了。

2、執行緒函式的定義:

執行緒函式的規範格式定義為

DWORD  WINAPI ThreadProc (LPVOID lpParam);//格式不正確將無法呼叫成功。函式名稱沒有限制,只要符合命名規則就可以。

但我常常看到有下列的執行緒函式定義:

void ThreadProc ();//該格式也是可以的,但使用的時候要這樣通過

LPTHREAD_START_ROUTINE轉換,如:

(LPTHREAD_START_ROUTINE)ThreadProc

我建議還是使用規範的格式比較好,不推薦使用void ThreadProc ()格式。不信就請看看MSDN的說明吧:

Do not declare this callback function with avoid return typeand cast the function pointer to LPTHREAD_START_ROUTINE when creatingthe thread. Code that does this is common, but it can crash on 64-bit Windows.

而且執行緒函式必須是全域性函式,不能在類中宣告和定義。

3、多執行緒例項1:

我在此將寫一個簡單的多執行緒程式,用以展示多執行緒的功能和使用方法。該程式的主要的思想是畫3個進度條,分別以多執行緒和單執行緒方式完成,大家可以比較一下。

說明:

(1)該程式還將和單執行緒做對比。

(2)由於給執行緒的函式傳遞了多個引數,所以採用結構體的方式傳遞引數。

(3)為了演示效果,採用了比較耗時的打點處理。

主要的函式如下:

在標頭檔案的定義

  1. //執行緒函式宣告
  2. DWORD WINAPI ThreadProc(LPVOIDlpParam);  
  3. //為了傳遞多個引數,我採用結構體
  4. struct threadInfo  
  5. 相關推薦

    C++執行函式CreateThread()

    採用CreateThread()建立多執行緒程式 原創 2012年12月10日 11:44:59

    C++執行函式_beginthread/_beginthreadex/CreateThread

    Part1: 1、CRT簡介: CRT: (C Runtime Library)即C執行時庫,是系統執行的基礎,包含了c常用的函式集(如:printf,malloc,strcpy等),為執行main做了初始化環境變數、堆、io等資源,並在結束後清理。 在

    C++11執行(七):《 三:std::future & std::shared_future》

    #include <iostream>                // std::cout #include <future>                // std::async, std::future #include <chrono>            

    Java執行——synchronized使用

    一 前言 Java多執行緒是面試必考的知識點,哈哈,說的有點太絕對了,題外話不說那麼多了,今天我們就來了解一下Java多執行緒中的synchronized。 synchronized相信大家都看過或者用過,synchronized是Java中的關鍵字,synchronized可以

    ThreadLocal 執行環境使用

    ThreadLocal 介紹 ThreadLocal  就是一個Map。key - > Thread.getCurrentThread()。value - > 執行緒需要儲存的變數。在多執行緒環境中,相當於各自執行緒的一個內部map變數。 每個

    執行屬性pthread_attr

    Posix執行緒中的執行緒屬性pthread_attr_t主要包括scope屬性、detach屬性、堆疊地址、堆疊大小、優先順序。在pthread_create中,把第二個引數設定為NULL的話,將採用預設的屬性配置。 執行緒屬性結構如下: typedef s

    Java執行---阻塞佇列(舉例說明)

    一. 前言   在新增的Concurrent包中,BlockingQueue很好的解決了多執行緒中,如何高效安全“傳輸”資料的問題。通過這些高效並且執行緒安全的佇列類,為我們快速搭建高質量的多執行緒程式帶來極大的便利。本文詳細介紹了BlockingQueue家庭中的所有成員

    C++執行CreateThread

    WIN32API,需要包含標頭檔案windows.h API簡介 簡單瞭解下,平時用到的也就那兩三個。 介面 簡介 SwitchToThread 切換到另一個可排程執行緒 CreateThread 建立執行緒 CreateRemoteTh

    java執行小示例

    package com.chillax.controller; import java.io.IOException; public class MultiThread { public static void main(String[] args) { System.out.p

    執行傳參

    1.傳遞臨時物件做執行緒引數 1.1要避免的陷阱1 用detach()時,如果主執行緒先結束,變數就會被回收;所以用detach()的話,不推薦用引用,同時絕對不能用指標。 1.2要避免的陷阱2 只要臨時物件的用臨時構造A類物件作為引數傳遞給執行緒,那麼就一定能夠在主執行緒結束之

    執行安全問題

    在上一篇部落格中已經提到了什麼是多執行緒:https://blog.csdn.net/weixin_42647847/article/details/80969240那多執行緒在java中是如何實現的呢。一、實現多執行緒的四種方式1.繼承Thread類,重寫run方法2.實現

    JAVA執行 join() 方法及應用場景

    在某些情況下,主執行緒建立並啟動了子執行緒,如果子執行緒中需要進行大量的耗時運算,主執行緒往往將早於子執行緒結束之前結束,如果主執行緒想等待子執行緒執行完畢後,獲得子執行緒中的處理完的某個資料,就要用

    NET執行同步方法(五):訊號量(Semaphore)

       訊號量就像一個夜總會:它有確切的容量,並被保鏢控制。一旦滿員,就沒有人能再進入,其他人必須在外面排隊。那麼在裡面離開一個人後,隊頭的人就可以進入。訊號量的建構函式需要提供至少兩個引數-現有的人數和最大的人數。 訊號

    執行】BlockingQueue

    前言:      在新增的Concurrent包中,BlockingQueue很好的解決了多執行緒中,如何高效安全“傳輸”資料的問題。通過這些高效並且執行緒安全的佇列類,為我們快速搭建高質量的多執行緒程式帶來極大的便利。本文詳細介紹了BlockingQueue家庭中的所有成員

    PHP Curl執行原理例項

    <?php  // 建立一對cURL資源  $ch1 = curl_init();  $ch2 = curl_init();  // 設定URL和相應的選項  curl_setopt($ch1, CURLOPT_URL, "http://www.jb51.net/");  curl_setopt($

    Android 開發之執行處理——Handler

        Android開發過程中為什麼要多執行緒     我們建立的Service、Activity以及Broadcast均是一個主執行緒處理,這裡我們可以理解為UI執行緒。但是在操作一 些耗時操作時,比如I/O讀寫的大檔案讀寫,資料庫操作以及網路下載需要很長時間,為了不

    Java執行-Thread.yield

    http://blog.csdn.net/dabing69221/article/details/17426953 Thread.yield( )方法: 使當前執行緒從執行狀態(執行狀態)變為可執行態(就緒狀態)。cpu會從眾多的可執行態裡選擇,也就是說,當前也就

    java執行-join方法(附面試題)

    本文對java Thread中join()方法進行介紹,join()的作用是讓“主執行緒”等待“子執行緒”結束之後才能繼續執行,大家參考使用吧 本章涉及到的內容包括: 1. join()

    理解 JAVA執行技術之

    1.    虛假的多執行緒     例1:     public class TestThread     {     int i=0, j=0;     public void go(int flag){     while(true){     try{    

    40道阿里巴巴JAVA研發崗執行面試題,你能答出多少

    1、多執行緒有什麼用? 一個可能在很多人看來很扯淡的一個問題:我會用多執行緒就好了,還管它有什麼用?在我看來,這個回答更扯淡。