1. 程式人生 > >VS執行緒學習筆記(C++)

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.執行緒間的通訊        通過管道實現執行緒間的通訊:位元組流        通訊關單實現執行緒間的通訊:字元流        等待通知之交叉備份