C++多執行緒函式CreateThread()詳解
採用CreateThread()建立多執行緒程式
原創 2012年12月10日 11:44:59採用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)為了演示效果,採用了比較耗時的打點處理。
主要的函式如下:
在標頭檔案的定義
- //執行緒函式宣告
- DWORD WINAPI ThreadProc(LPVOIDlpParam);
- //為了傳遞多個引數,我採用結構體
- struct threadInfo
-
相關推薦
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、多執行緒有什麼用? 一個可能在很多人看來很扯淡的一個問題:我會用多執行緒就好了,還管它有什麼用?在我看來,這個回答更扯淡。