VS執行緒學習筆記(C++)
1.程式、程序、執行緒、多執行緒概念
程式:計算機指令的集合,以檔案的形式儲存在磁碟上。不佔用執行資源。
程序:程式的執行例項,程式在其自身的地址空間中的一次執行活動。可進行資源申請、排程和獨立執行。執行緒的執行環境。
執行緒:程序內的一個執行路徑,負責執行包含線上程地址空間中的程式碼。
多執行緒程式:程序地址空間中有多個執行緒,其中一個為主執行緒。所有程序共享程序的地址空間、全域性物件等資源。執行緒之間的切換依靠執行環境的改變。
2.執行緒的建立(參考《VisualC++2010 開發權威指南》第14章)
//宣告控制函式(全域性的,不放在類中)
UINT ThreadFunc(LPVOID pPARAM);
//定義控制函式,一般執行緒函式中只有三句話
UINT ThreadFunc(LPVOID pPARAM)
{
CVideoProcessDlg *ptp = (CVideoProcessDlg*)pPARAM; //指標強制轉換;
ptp->ImageProcess(); //呼叫某個物件中的方法(該方法一般不需要輸入引數);
return 0; //return
}
CWinThread* pThread; //在類中宣告,可以用於執行緒的控制,如暫停和喚醒
//建立工作者執行緒,可以在初始化中建立
pThread = AfxBeginThread(ThreadFunc, //執行緒函式名
this,//此物件指標
THREAD_PRIORITY_NORMAL,//優先權,一般使用預設模式
0,
CREATE_SUSPENDED, //執行緒初始狀態為暫停
NULL);
pThread->ResumeThread(); //啟動執行緒
pThread->SuspendThread(); //暫停執行緒
3.執行緒之間的同步(參考《VC++深入詳解》第16章)
HANDLE g_hEvent //在類中宣告
g_hEvent = CreateEvent(NULL,//程序預設安全性
TRUE,//人工重置的事件物件
FALSE,//初始處於無訊號狀態
NULL);//匿名的事件物件
SetEvent(g_hEvent); //設定事件物件為有訊號狀態
ResetEvent(g_hEvent); //設定事件物件為無訊號狀態
WaitForSingleObject(g_hEvent, INFINITE); //等待有訊號狀態的事件,放置在ImageProcess()中
4.當一個執行緒訪問資源時候,其他執行緒不能同時訪問該資源。這裡可以利用BOOL變數,完成執行緒的互斥。5.注意OnClose()中的回收工作,需要釋放資源,確保執行緒的終止等
void CVideoProcessDlg::OnClose()
{
// TODO: 在此新增訊息處理程式程式碼和/或呼叫預設值
m_bQuit = TRUE;//主執行緒結束訊號
SetEvent(m_hEventImageAcquired);//防止執行緒處於等待狀態,讓執行緒能夠順利終止(執行到return)
Sleep(20); //給執行緒的終止留出時間
CDialogEx::OnClose();
}
相關推薦
VS執行緒學習筆記(C++)
1.程式、程序、執行緒、多執行緒概念 程式:計算機指令的集合,以檔案的形式儲存在磁碟上。不佔用執行資源。 程序:程式的執行例項,程式在其自身的地址空間中的一次執行活動。可進行資源申請、排程和獨立執行。執行緒的執行環境。 執行緒:程序內的一個執行路徑,負責執行包含線上程地址空
Java多執行緒學習筆記(四)
1、原子性:操作不能被打斷,要麼成功要麼失敗。i++ 不是原子操作。 2、可見性:一個執行緒修改了資料,其他執行緒立刻可見。 3、順序性: 4、volatile 保證程式的可見性,和順序性。不能保證對複合操作(如i++)的原子性。 javap -v xxx.class
多執行緒學習筆記(一)
一. 新建執行緒(兩種方法) 第一種:繼承Thread 1.定義一個類繼承Thread 2.該類重寫run方法。其中的getName是獲取執行緒名方法;有參構造可以在新建時指定執行緒名 3.建立子類物件就是建立新執行緒 4.子類物件呼叫start方法 ,開啟執行
Java多執行緒學習筆記(一)之中斷中的Interrupt,interrupted(),isInterrupted()
1、關於中斷 在Java中中斷最初是通過stop()來終止執行緒的,後來發現這樣簡單粗暴的停止執行緒會產生很多問題(例如物件monitor的釋放),所以改為deprecated,推薦使用interrupt()來中斷執行緒。而對於執行緒來說,會持有一個inter
java多執行緒學習筆記(高階)
1.程序和程序之間的記憶體是獨立的。 2.多程序的程式是為了提高CPU的使用率。 3.多執行緒不是為了提高執行速度,而是為了提高應用程式的使用率。 4.執行緒和執行緒共享“堆記憶體和方法區記憶體”,棧記憶體是獨立的也就是說一個執行緒一個棧。 5.關於java程式的執行原理:
Java 多執行緒 學習筆記(二)停止執行緒的幾種方法
1.異常法: package test; import exthread.MyThread; import exthread.MyThread; public class Run { pu
多執行緒學習筆記(三)之單例模式中的執行緒問題
在某些情況下,每個類只需要一個例項,單例模式就是保證在整個應用程式的生命週期中,任何一個時刻,單例類的例項都只存在一個(當然也可以不存在),核心點: 將採用單例模式的類的構造方法私有化(private修飾) 在其內部產生該類的例項化物件,並將其封裝成priv
Java 多執行緒學習筆記(五)synchronized 鎖重入
關鍵字synchronized 擁有鎖重入的功能,也就是使用synchronized時,當一個執行緒得到一個物件鎖後,再次請求此物件鎖時是可以再次得到該物件的鎖的。這也就證明在一個synchroniz
多執行緒學習筆記(二)之執行緒安全問題
執行緒安全問題的現象 首先讓我們考慮一個問題: class Demo implements Runnable{ private int num = 100; //實現Runnable介面,覆蓋run方法 public void r
多執行緒學習筆記(1)
1.執行緒的建立 兩種方式:繼承Thread類,實現Runnable介面 繼承Thread類:重寫run方法 實現Runnable介面:實現run方法,同時需在宣告時飲用Thread類構造方法來成為真正的執行緒物件。 實現Runnable介面的好處是:若所定義的類已經是其他
Java 多執行緒學習筆記(七)資料型別String的常量池特性
將synchronized(String)與String 混合使用時需要注意String的常量池特性帶來的影響 package extthread; import service.Service;
Java 多執行緒學習筆記(十一) 單例設計模式(延遲載入/懶漢模式)DCL解決執行緒安全問題
package extthread; import test.MyObject; public class MyThread extends Thread { @Override publi
多執行緒學習總結(二)
一、多執行緒帶來的問題 (一)活躍性問題 死鎖:兩個執行緒相互等待對方釋放資源 飢餓: 多執行緒併發時優先順序低的執行緒永遠得不到執行;執行緒被永久阻塞在一個等待進入同步塊的狀態;等待的執行緒永遠不被喚醒 活鎖:活鎖指的是任務或者執行者沒有被阻塞,由於某些條件沒有滿足,導致
多執行緒學習總結(一)
一、程序和執行緒的定義 程序:程序是資源(CPU、記憶體等)分配的基本單位,它是程式執行時的一個例項。程式執行時系統就會建立一個程序,併為它分配資源,然後把該程序放入程序就緒佇列,程序排程器選中它的時候就會為它分配CPU時間,程式開始真正執行。 執行緒:執行緒是程式執行時的最小單位,它是程序
java執行緒學習總結(一)
(宣告:並非原創,只是一個簡單總結) 一、執行緒和程序的概念: 程序:程序是處於執行過程中的程式,並且具有一定的對功能,是系統進行資源分配和排程的一個獨立單位。
JAVA多執行緒學習心得(三)
今天看了併發實踐這本書的ReentantLock這章,感覺對ReentantLock還是不夠熟悉,有許多疑問,所有在網上找了很多文章看了一下,總體說的不夠詳細,重點和焦點問題沒有談到,但這篇文章相當不錯,說的很全面,主要的重點都說到了,所有在這裡轉載了這篇文章,注意紅色字
MyBatis的解析和執行原理---學習筆記(三)
官方文件執行分兩大部分1.讀取配置檔案,快取到Configuration物件中,用來建立SqlSessionFactory2.SqlSession執行過程動態代理:JDK反射機制和CGLIB代理。用於為Mapper產生代理類,執行相關方法。反射呼叫的最大好處是配置性大大提高,
C#學習筆記(11)- 執行緒類與程序類
為什麼要使用多執行緒? 讓計算機“同時”做多件事情,節約時間 多執行緒可以讓一個程式“同時”處理多個事情 後臺執行程式,提高程式的執行效率,也不會使主介面出現無響應的情況 獲得當前執行緒與當前程序 前臺執行緒與後臺執行緒 前臺執行緒:只有所
《自己動手寫java虛擬機器》學習筆記(七)-----執行緒私有執行時資料區(go)
專案地址:https://github.com/gongxianshengjiadexiaohuihui 在執行java程式時,Java虛擬機器需要使用記憶體來存放各種各樣的資料,Java虛擬機器規範把這些記憶體的區
多執行緒學習筆記--04執行緒間的通訊(通訊管道實現執行緒間的通訊)
1.執行緒間的通訊 通過管道實現執行緒間的通訊:位元組流 通訊關單實現執行緒間的通訊:字元流 等待通知之交叉備份