成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

使用C++Builder注意事項

開發 后端
使用C++Builder線程對象不允許控制線程堆棧的大小或其安全屬性,若需要控制這些,必須使用WindowsAPI的Create Thread()或Begin Thread()函數。

C++Builder作為一個高效的C++程序語言,其混合了函數語言和物件導向程序編制語言,并且完美的適用于編程、算法、技術和探索性開發,因此可以在使用的過程當中感受到趣味性和吸引力。

注意,線程對象不允許控制線程堆棧的大小或其安全屬性。若需要控制這些,必須使用WindowsAPI的Create Thread()或Begin Thread()函數。TThread類有以下一些屬性和方法:

1) 屬性:

◆Priority:優先級屬性。可以設置線程的優先級。

◆Return Value:返回值屬性。當線程介紹時返回給其他線程一個數值。

◆Suspended:掛起屬性。可以判斷線程是否被掛起。

◆Terminated:結束屬性。用來標志是否應該結束線程。

◆ThreadID:標識號屬性。在整個系統中線程的標識號。使用Windows API函數時該屬性非常有用。

2)方法:

◆Do Terminate:產生一個On Terminate事件,但是不結束線程的執行。

◆Resume:喚醒一個線程繼續執行。

◆Suspend:掛起一個線程,要與Resume過程成對使用。

◆Synchronize:由主C++線程調用的一個同步過程。

◆Terminate:將Terminate屬性設置為True,中止線程的執行。

◆Wait For:等待線程的中止并返回Return Value屬性的數值。

2、協調線程

在編寫線程執行時運行的代碼時,必須考慮到可能同步執行的其他線程的行為。特別注意,避免兩個線程試圖同時使用相同的全局對象或變量。另外,一個線程中的代碼會依賴其他線程執行任務的結果。

1) 避免同時訪問

為避免在訪問全局對象或變量時與其他線程發生沖突,可能需要暫停其他線程的執行,直到該線程代碼完成操作。

(1)鎖定對象。一些對象內置了鎖定功能,以防止其他線程使用該對象的實例。例如,畫布對象(TCanvas及其派生類)有一種Lock()函數可以防止其他線程訪問畫布,直到調用Unlock()函數。顯然,這種方法只對部分類有效。

(2)使用重要區段。若對象沒有提供內置的鎖定功能,可使用重要區段。重要區段像門一樣,每次只允許一個線程進入,要使用重要區段,需創建TCriticalSection的全局實例。TCriticalSection有兩個函數:Acquire()(阻止其他線程執行該區域)及Release()(取消對其他線程的阻止)。

(3)使用多重讀、獨占寫的同步器。當使用重要區段來保護全局內存時,每次只有一個線程可以使用該內存。這種保護可能會超出了需要,特別是有一個經常讀但很少寫的對象或變量時更是如此。多個線程同時讀相同內存但沒有線程寫內存是沒有危險的。

當有一些經常被讀,但是很少寫的全局變量時,可用TMultiReadExclusiveWriteSynchronizer對象保護它。這個對象和重要區段一樣,但它允許多個線程同時讀,只要沒有線程寫即可。每個需要讀內存的線程首先要調用Begin Read()函數(確保當前無其他線程寫內存),線程完成對保護內存讀操作后,要調用End Read()函數。任何線程需要寫保護內存必須調用Begin Write()函數(確保當前無其他線程讀或寫內存),完成對保護內存寫操作后,調用End Write()函數。

(4)使用Synchronize函數:Void __fast call Synchronize (TThreadMethod &Method);

其中參數Method為一個不帶參數的過程名。在這個不帶參數的過程中是一些訪問VCL的代碼。我們可以在Execute過程中調用Synchronize過程來避免對VCL的并發訪問。程序運行期間的具體過程實際上是由Synchronize過程來通知主線程。

然后主線程在適當的時機來執行Synchronize過程的參數列表中的那個不帶參數的過程。在多個線程的情況下,主線程將Synchronize過程發過來的通知放到消息隊列中,然后逐個地響應這些消息。通過這種機制Synchronize實現了線程之間地同步。

2) 等待其他線程

使用C++Builder若線程必須等待另一線程完成某項任務,可讓線程臨時中斷執行。然后,要么等待另一線程完全執行結束,要么等待另一線程通知完成了該任務。

(1)等待線程執行結束

要等待另一線程執行結束,使用它地Wait For()函數。Wait For函數直到那個線程終止才返回,終止的方式要么完成了其Execute()函數,要么由于一個異常。

(2)等待任務完成。有時,只需要等待線程完成一些操作而不是等待線程執行結束。為此,可使用一個事件對象。事件對象(TEvent)應具有全局范圍以便他們能夠為所有線程可見。

當一個線程完成一個被其他線程依賴的操作時,調用TEvent::Set Event()函數。Set Event發出一個信號,以便其他線程可以檢查并得知操作完成。要關掉信號,則使用Reset Event()函數。

例如,當必須等待若干線程完成其執行而不是單個線程時。因為不知道哪個線程最后完成,使用C++Builder函數時,此時,可通過調用Set Event以在線程結束時累加計數值并在最后一個線程結束時發出信號以指示所有線程結束。

【編輯推薦】

  1. 如何正確編寫C++項目開發編寫項目計劃書
  2. 對C++庫函數進行學習探索總結筆記
  3. 深度演示C++語言的種種高安全性
  4. 詳細介紹如何準確無誤的編寫C++語言
  5. 深度演示C++語言的種種高安全性
責任編輯:chenqingxiang 來源: 計世網
相關推薦

2010-01-15 09:33:01

CC++Builder

2010-02-03 16:42:45

C++變量作用域

2010-01-26 14:04:14

C++Builder

2010-01-26 14:10:22

Visual C++

2010-01-15 09:48:04

C++Builder

2010-11-26 16:27:01

MySQL使用變量

2010-01-18 16:12:16

CC++語言

2011-07-19 10:16:58

噴墨打印機注意事項

2010-01-14 18:19:40

C++語言

2009-09-01 17:25:33

初學C#編程

2010-01-25 18:12:28

C++

2010-01-21 16:33:44

C++Builder

2012-03-12 16:46:22

NoSQL數據庫

2012-12-27 13:04:17

Android開發SQLite數據庫

2011-04-14 11:28:07

光纖

2011-07-28 17:29:22

HBaseShell

2009-12-15 17:47:17

VSIP

2010-01-21 11:30:10

2010-09-16 09:52:49

CSS display

2009-12-22 09:48:58

WCF枚舉類型
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 伊人狠狠 | 国产一区二区三区久久久久久久久 | 国产yw851.c免费观看网站 | 成年人在线视频 | 九色网址 | 欧美国产精品一区二区三区 | 青青草av在线播放 | 午夜小视频在线播放 | 日韩一区在线观看视频 | 日韩欧美一区二区三区免费观看 | 中文字幕一区在线观看视频 | 国产欧美一区二区三区在线看 | 成人免费观看男女羞羞视频 | 亚洲在线免费观看 | 日韩快播电影网 | av看片| 天天想天天干 | 亚洲成人免费在线 | 亚洲精品视 | 成人免费视频久久 | 欧美理伦片在线播放 | a在线视频 | 亚洲日本一区二区 | 欧美极品视频在线观看 | 国产乱码精品一品二品 | 一区二区三区在线 | 欧 | 国产精品高清在线 | 色小姐综合网 | 拍真实国产伦偷精品 | 福利视频一二区 | 亚洲精品久久久久久一区二区 | 中文成人在线 | 亚洲精品中文字幕在线观看 | 国产成人精品一区二 | 欧美一区免费 | 久久久久久久国产精品影院 | japanhd成人| 欧美日韩中文字幕 | 中文字幕在线播放第一页 | 亚洲成人中文字幕 | 永久精品 |