分布式並行編程
❶ 大數據工程師學哪些核心技術是什麼
【導讀】提起大數據大家都不陌生,是高薪的代名詞。因此吸引了不少零基礎和跨行業的的小夥伴想要進入到此行業,那麼大數據工程師學哪些?核心技術是什麼呢?為了幫助大家更好的融入到工作中,小編整理了以下幾點,希望對大家有所幫助。
一、大數據採集
大數據採集,即對各種來源的結構化和非結構化海量數據,所進行的採集。
資料庫採集:流行的有Sqoop和ETL,傳統的關系型資料庫MySQL和Oracle
也依然充當著許多企業的數據存儲方式。當然了,目前對於開源的Kettle和Talend本身,也集成了大數據集成內容,可實現hdfs,hbase和主流Nosq資料庫之間的數據同步和集成。
網路數據採集:一種藉助網路爬蟲或網站公開API,從網頁獲取非結構化或半結構化數據,並將其統一結構化為本地數據的數據採集方式。
文件採集:包括實時文件採集和處理技術flume、基於ELK的日誌採集和增量採集等等。
二、大數據預處理
大數據預處理,指的是在進行數據分析之前,先對採集到的原始數據所進行的諸如「清洗、填補、平滑、合並、規格化、一致性檢驗」等一系列操作,旨在提高數據質量,為後期分析工作奠定基礎。數據預處理主要包括四個部分:數據清理、數據集成、數據轉換、數據規約。
三、大數據儲存
大數據每年都在激增龐大的信息量,加上已有的歷史數據信息,對整個業界的數據存儲、處理帶來了很大的機遇與挑戰.為了滿足快速增長的存儲需求,雲存儲需要具備高擴展性、高可靠性、高可用性、低成本、自動容錯和去中心化等特點.常見的雲存儲形式可以分為分布式文件系統和分布式資料庫。其中,分布式文件系統採用大規模的分布式存儲節點來滿足存儲大量文件的需求,而分布式的NoSQL資料庫則為大規模非結構化數據的處理和分析提供支持。
四、大數據清洗
MapRece作為Hadoop的查詢引擎,用於大規模數據集的並行計算,」Map(映射)」和」Rece(歸約)」,是它的主要思想。它極大的方便了編程人員在不會分布式並行編程的情況下,將自己的程序運行在分布式系統中。隨著業務數據量的增多,需要進行訓練和清洗的數據會變得越來越復雜,這個時候就需要任務調度系統,比如oozie或者azkaban,對關鍵任務進行調度和監控。
五、大數據查詢分析
Hive的核心工作就是把SQL語句翻譯成MR程序,可以將結構化的數據映射為一張資料庫表,並提供 HQL(Hive
SQL)查詢功能。Hive本身不存儲和計算數據,它完全依賴於HDFS和MapRece。可以將Hive理解為一個客戶端工具,將SQL操作轉換為相應的MapRece
jobs,然後在hadoop上面運行。Hive支持標準的SQL語法,免去了用戶編寫MapRece程序的過程,它的出現可以讓那些精通SQL技能、但是不熟悉MapRece
、編程能力較弱與不擅長java語言的用戶能夠在HDFS大規模數據集上很方便地利用SQL 語言查詢、匯總、分析數據。
六、大數據可視化
大規模數據的可視化主要是基於並行演算法設計的技術,合理利用有限的計算資源,高效地處理和分析特定數據集的特性。通常情況下,大規模數據可視化的技術會結合多解析度表示等方法,以獲得足夠的互動性能。
在科學大規模數據的並行可視化工作中,主要涉及數據流線化、任務並行化、管道並行化和數據並行化4 種基本技術。
以上就是小編今天給大家整理發送的關於「大數據工程師學哪些?核心技術是什麼?」的相關內容,希望對大家有所幫助。想了解更多關於數據分析及人工智慧就業崗位分析,關注小編持續更新。
❷ MapRece 與 HBase 的關系
MapRece與HBase沒有關系:
MapRece:
MapRece是一種編程模型,用於大規模數據集的並行運算。概念"Map"和"Rece",是它們的主要思想,都是從函數式編程語言里借來的,還有從矢量編程語言里借來的特性。它極大地方便了編程人員在不會分布式並行編程的情況下,將自己的程序運行在分布式系統上。
HBase:
HBase是一個分布式的、面向列的開源資料庫,該技術來源於 Fay Chang 所撰寫的Google論文「Bigtable:一個結構化數據的分布式存儲系統」。
就像Bigtable利用了Google文件系統所提供的分布式數據存儲一樣,HBase在Hadoop之上提供了類似於Bigtable的能力。HBase是Apache的Hadoop項目的子項目。
(2)分布式並行編程擴展閱讀:
MapRece集群中使用大量的低端伺服器,因此,節點硬體失效和軟體出錯是常態,因而一個良好設計、具有高容錯性的並行計算系統不能因為節點 失效而影響計算服務的質量。
任何節點失效都不應當導致結果的不一致或不確定性;任何一個節點失效時,其他節點要能夠無縫接管失效節點的計算任務;當失效節 點恢復後應能自動無縫加入集群,而不需要管理員人工進行系統配置。
MapRece並行計算軟體框架使用了多種有效的錯誤檢測和恢復機制,如節點自動重 啟技術,使集群和計算框架具有對付節點失效的健壯性,能有效處理失效節點的檢測和恢復。
❸ 從並行計算的角度對比,MPI 與 OpenMP 有什麼區別
OpenMP和MPI是並行編程的兩個手段,對比如下:
OpenMP:線程級(並行粒度);共享存儲;隱式(數據分配方式);可擴展性差。
MPI:進程級;分布式存儲;顯式;可擴展性好。OpenMP採用共享存儲,意味著它只適應於SMP,DSM機器,不適合於集群。MPI雖適合於各種機器,但它的編程模型復雜。
需要分析及劃分應用程序問題,並將問題映射到分布式進程集合。需要解決通信延遲大和負載不平衡兩個主要問題。
延伸論述:
我認為,要理解OpenMP和MPI,首先要有一些操作系統知識和系統編程基礎——OpenMP對應的實際上是單進程多線程的並發編程模型,可以將一個單線程的程序按for循環拆分成多線程——相當於pthread_create。
對於同一個進程的多個線程來說,由於它們只是獨占自己的棧內存,堆內存是共享的,因此數據交換十分地容易,直接通過共享變數就可以進行交換,編程模型非常簡單易用,並且對於操作系統來說,線程的上下文切換成本也比進程低很多。
然而另一方面,由於線程不能脫離進程獨立存在,而一個進程不能存在於多台機器上,所以OpenMP只適用於擁有多個CPU核心的單台電腦。並且多線程編程存在臨界區(Critical Section),需要你自己去加鎖,解決Race Condition問題,否則的話很容易導致不可預知的後果。
而MPI則是多進程的並發編程模型,相當於你自己調用fork——每一個進程的內存地址空間都是獨立的,它們彼此之間幾乎什麼都不共享,只能通過進程間通信(IPC)來交換彼此的數據,因此編程難度明顯要大很多。
MPI有一個非常顯著的優點,那就是對於一個分布式系統來說,進程是可以在分布式系統的每一台電腦之間轉移的,因此對於擁有多台電腦的分布式系統來說,其並發性要明顯好於OpenMP。
❹ 採用並行計算的程序用什麼編程語言開發最好
分布式(即並行計算)的編寫一般用的是C++(也有用JAVA的,但是都是娛樂性質的項目了,不是主流),基本不用MPI介面。並行計算用MPI或者OpenMP。如果把網格計算算做分布式計算(網格計算是分布式計算的一種特例,但是有區別,區別僅僅在編程方法和實際應用的范圍上),網格計算使用中間件!而且對聯網的各台計算機的操作系統的要求比較特殊。
當然vb也是可以的,c++這方面的類庫比較多。
❺ 畢業設計 我想闡述一下並行計算的發展
從20世紀40年代開始的現代計算機發展歷程可以分為兩個明顯的發展時代:串列計算時代、並行計算時代。每一個計算時代都從體系結構發展開始,接著是系統軟體(特別是編譯器與操作系統)、應用軟體,最後隨著問題求解環境的發展而達到頂峰。
並行計算機是由一組處理單元組成的。這組處理單元通過相互之間的通信與協作,以更快的速度共同完成一項大規模的計算任務。因此,並行計算機的兩個最主要的組成部分是計算節點和節點間的通信與協作機制。並行計算機體系結構的發展也主要體現在計算節點性能的提高以及節點間通信技術的改進兩方面。
節點性能不斷進步
20世紀60年代初期,由於晶體管以及磁芯存儲器的出現,處理單元變得越來越小,存儲器也更加小巧和廉價。這些技術發展的結果導致了並行計算機的出現。這一時期的並行計算機多是規模不大的共享存儲多處理器系統,即所謂大型主機。IBM 360是這一時期的典型代表。
到了20世紀60年代末期,同一個處理器開始設置多個功能相同的功能單元,流水線技術也出現了。與單純提高時鍾頻率相比,這些並行特性在處理器內部的應用大大提高了並行計算機系統的性能。伊利諾依大學和Burroughs公司此時開始實施Illiac Ⅳ計劃,研製一台64顆CPU的SIMD主機系統,它涉及到硬體技術、體系結構、I/O設備、操作系統、程序設計語言直至應用程序在內的眾多研究課題。不過,當一台規模大大縮小的原型系統(僅使用了16顆CPU)終於在1975年面世時,整個計算機界已經發生了巨大變化。
首先是存儲系統概念的革新,提出虛擬存儲和緩存的思想。以IBM 360/85和IBM 360/91為例,兩者是屬於同一系列的兩個機型,IBM 360/91的主頻高於IBM 360/85,所選用的內存速度也較快,並且採用了動態調度的指令流水線。但是,IBM 360/85的整體性能卻高於IBM 360/91,惟一的原因就是前者採用了緩存技術,而後者則沒有。
其次是半導體存儲器開始代替磁芯存儲器。最初,半導體存儲器只是在某些機器中被用作緩存,而CDC7600則率先全面採用這種體積更小、速度更快、可以直接定址的半導體存儲器,磁芯存儲器從此退出了歷史舞台。與此同時,集成電路也出現了,並迅速應用到計算機中。元器件技術的這兩大革命性突破,使得Illiac Ⅳ的設計者們在底層硬體以及並行體系結構方面提出的種種改進都大為遜色。
處理器高速發展
1976年Cray-1問世以後,向量計算機從此牢牢地控制著整個高性能計算機市場15年。Cray-1對所使用的邏輯電路進行了精心的設計,採用了我們如今稱為RISC的精簡指令集,還引入了向量寄存器,以完成向量運算。這一系列技術手段的使用,使Cray-1的主頻達到了80MHz。
微處理器隨著機器的字長從4位、8位、16位一直增加到32位,其性能也隨之顯著提高。正是因為看到了微處理器的這種潛力,卡內基·梅隆大學開始在當時流行的DEC PDP-11小型計算機的基礎上研製一台由16台PDP-11/40處理機通過交叉開關與16個共享存儲器模塊相連接而成的共享存儲多處理器系統C.mmp。
從20世紀80年代開始,微處理器技術一直在高速前進。稍後又出現了非常適合於SMP方式的匯流排協議。而伯克利加州大學則對匯流排協議進行了擴展,提出了Cache一致性問題的處理方案。從此,C.mmp開創出的共享存儲多處理器之路越走越寬。現在,這種體系結構已經基本上統治了伺服器和桌面工作站市場。
通信機制穩步前進
同一時期,基於消息傳遞機制的並行計算機也開始不斷涌現。20世紀80年代中期,加州理工學院成功地將64個i8086/i8087處理器通過超立方體互連結構連結起來。此後,便先後出現了Intel iPSC系列、INMOS Transputer系列,Intel Paragon以及IBM SP的前身Vulcan等基於消息傳遞機制的並行計算機。
20世紀80年代末到90年代初,共享存儲器方式的大規模並行計算機又獲得了新的發展。IBM將大量早期RISC微處理器通過蝶形互連網路連結起來。人們開始考慮如何才能在實現共享存儲器緩存一致的同時,使系統具有一定的可擴展性。20世紀90年代初期,斯坦福大學提出了DASH計劃,它通過維護一個保存有每一緩存塊位置信息的目錄結構來實現分布式共享存儲器的緩存一致性。後來,IEEE在此基礎上提出了緩存一致性協議的標准。
20世紀90年代至今,主要的幾種體系結構開始走向融合。
屬於數據並行類型的CM-5除大量採用商品化的微處理器以外,也允許用戶層的程序傳遞一些簡單的消息。
Cray T3D是一台NUMA結構的共享存儲型並行計算機,但是它也提供了全局同步機制、消息隊列機制,並採取了一些減少消息傳遞延遲的技術。
隨著微處理器商品化、網路設備的發展以及MPI/PVM等並行編程標準的發布,集群架構的並行計算機出現開始。IBM SP2系列集群系統就是其中的典型代表。在這些系統中,各個節點採用的都是標準的商品化計算機,它們之間通過高速網路連接起來。
1.2 有限元並行計算的發展和現狀
目前,在計算力學領域內,圍繞著基於變分原理的有限元法
和基於邊界積分方程的邊界元法,以及基於現在問世的各種並行
計算機,逐漸形成了一個新的學科分支——有限元並行計算。它
是高效能的,使得許多現在應用串列計算機和串列演算法不能解決
或求解不好的大型的、復雜的力學問題能得到滿意的解答,故其
發展速度十分驚人。在國際上已經掀起了利用並行機進行工程分
析和研究的高潮。從1975到1995年的二十年間,有關有限元方法
和相應的數值並行計算的文章已發表1000餘篇。
有限元並行計算正在向兩個方向發展。一是對系統方程組實
施並行求解的各種演算法。二是並行分析方法,包括有限元並行算
法和邊界元並行演算法,前者趨向成熟,而後者的研究較少。對這
一方面的研究,是為了挖掘有限元計算自身潛在的並行性,是有
限元並行計算的根本問題。
1.2.1國內
並行演算法的設計和有效實現強烈地依賴於並行機的硬軟體環
境。國內僅極少數單位擁有並行機,且機型雜亂,因此研究人員
少,起步晚,而且局限於特定的硬體環境。從有限元分析方法的
內容來看,發表的幾十篇研究論文(報告)還未顯示出較強的系
統性。
1)南京航空航天大學周樹荃教授等在YH-1向量機上實現了剛度
矩陣計算、對稱帶狀矩陣的Cholesky分解和線性方程組的求解等
並行處理。針對不規則結構工程分析問題,他們還採用了變帶寬
存貯方法,並實現了剛度矩陣的並行計算以及求解變帶寬稀疏線
性方程組的並行直接解法【20】。
2)中國科學院計算中心王藎賢研究員等在基於Transputer晶元
的分布式MIMD系統上,提出了有限元分析中變帶寬線性方程組的
並行直接解法,初步完成了一個靜力分析程序【21】。
3)重慶大學張汝清教授等藉助於ELXSI-6400共享存貯器型MIMD
系統,先後開展了范圍比較廣泛的並行演算法研究,主要成果有:
a)提出了靜力分析中子結構解法的並行演算法,以及動力分析中模
態綜合子結構法的並行演算法;
b)從波前法出發,發展了多波前並行演算法以求解大型結構分析
問題;
c)從Jacobi塊迭代法和加權殘差法出發,導出了基於非同步控制的
有限元方程並行解法和有限元並行迭代的基本格式;
d)利用圖論中的著色理論,實現了剛度矩陣的並行計算;
e)實現了基於有色線剖分的SOR並行迭代解法;
f)實現了子空間迭代法、Lanczos法以及利用多項式割線迭代法
和矢量迭代法求解結構固有頻率和模態的並行演算法;
g)針對彈塑性分析,提出了一種多波前子結構並行演算法;
h)針對彈性接觸問題,提出了一種基於參數變分原理的並行解法;
i)實現了一步積分法的並行處理【22】。
4)南京航空航天大學喬新教授等藉助於Transputer晶元的分布式
MIMD系統實現了有限元方程組的並行直接解法,並提出了基於子結
構的預處理共軛梯度法的並行計算方法【23】。
此外,浙江大學姚堅【24】、中國科學院西南計算中心馬寅國、
東北工學院張鐵以及國防科技大學六系也曾對有限元分析的並行計
算開展了一些研究。
上述研究結果表明,國內並行計算方法的研究,在硬體上基於
向量機、分布式並行機和共享存貯式並行機;在內容上,似乎面很
廣,但系統性和深度還很不夠,軟體開發距實際應用和商品化還有
很大距離,對不依賴並行機具體環境的通用並行演算法研究還很少,
同樣對旨在進行結構有限元分析的並行計算的硬體研究也很少。
1.2.2國外
自從美國國家宇航局(NASA)的A.K.Noor於1975年發表第一篇
有限元並行計算的文章以來,有限元並行處理技術幾乎與並行計算
機同步發展。距不完全統計,到1992年,國外已發表了400餘篇這方
面的論文,其中後5年的文章篇數是前12年的總和。在研究內容上也
由過去的演算法研究發展到了演算法、軟體和硬體相結合的研究,並針對
一些機型開發了一些實用的大型結構分析軟體。
1)有限元機器FEM【25】(Finite Element Machine)。早在70年
代末,就有人發表了有關FEM的論文,1982年美國國家宇航局Langley
研究中心的O.O.Storaasli等撰文詳細地介紹了該中心設計的供研究
用的FEM。該機器由1個處理器陣列、1台作為控制器的微機和1個並行
操作系統及一些模塊化了的通用並行演算法程序組成,用戶使用系統的
文本編輯器和控制器的其它特殊功能,能建立有限元計算模型並進行
分析。10多年來,又有一些人在這一方面進行了不懈的努力,但FEM
的發展前景仍然不太令人樂觀。
2)心動陣列並行機【26】。心動陣列並行機主要應用於信號和圖象
的並行處理,但由於其高效的矩陣計算功能,近年來有人把它應用於
有限元分析,並作了一些有益的嘗試。
3)巨型向量機【27】。在有限元分析中越來越顯示出巨大的威力,
處於領先的是美國思維公司的CM-2。許多結構分析家把這個具有65536
個處理器的巨型向量機應用於有限元計算,如T.Belyschko等人採用顯
式方法,完成了具有32768個單元的殼的非線性有限元計算,並行效率
極高,速度幾乎比CRAY X-MP/14並行機高出1個數量級。
4)並行機網路和工作站網路【28】。日本東京大學矢川等藉助高速網
絡把3台CRAY Y-MP機聯成網路進行有限元分析,有限元方程求解採用
的是基於區域分裂技術的共軛梯度法(CGM), 在求解三維彈性問題
時自由度個數超過了100萬,系統平均運行速度高達1.74GFLOPS。另外,
他們還基於一個工程工作站網路,在並行環境下進行了類似的研究,
求解問題的自由度數高達20萬個。
--
我左看右看前看後看可還是看不過來
這個....那個....我越看越奇怪....
不是我不明白,這世界變化快
❻ maprece是一個什麼類型的並行計算系統
MapRece是一種編程模型,用於大規模數據集(大於1TB)的並行運算。概念"Map(映射)"和"Rece(規約)",和他們的主要思想,都是從函數式編程語言里借來的,還有從矢量編程語言里借來的特性。他極大地方便了編程人員在不會分布式並行編程的情況下,將自己的程序運行在分布式系統上。 當前的軟體實現是指定一個Map(映射)函數,用來把一組鍵值對映射成一組新的鍵值對,指定並發的Rece(規約)函數,用來保證所有映射的鍵值對中的每一個共享相同的鍵組。
了解更多開源相關,去LUPA社區看看吧
❼ 下面哪些組件可以實現管理hbase的運行內存管理
riak 華師大的吧- -
下面來簡單介紹各個組件的作用:
HDFS(Hadoop distribute file system)——Hadoop生態系統的基礎組件Hadoop分布式文件系統。它是其他一些工具的基礎HDFS的機制是將大量數據分布到計算機集群上,數據一次寫入,但可以多次讀取用於分析。HDFS讓Hadoop可以最大化利用磁碟。
HBase—— 一個構建在HDFS之上的面向列的NoSql資料庫,HBase用於對打量數據進行快速讀取/寫入。HBase將Zookeeper用於自身的管理,以保證其所有組件都正在運行。HBase使得Hadoop可以最大化利用內存。
MapRece——MapRece是Hadoop的主要執行框架,它是一個用於分布式並行數據處理的編程模型,將作業分為mapping階段和rece階段。開發人員謂Hadoop編寫MapRece作業,並使用HDFS中存儲的數據,而HDFS可以保證快速的數據訪問。鑒於MapRece作業的特性,Hadoop以並行的方式將處理過程移向數據。MapRece使得Hadoop可以最大化利用CPU。
Zookeeper——Zookeeper是Hadoop的分布式協調服務。Zookeeper被設計成可以在機器集群上運行,是一個具有高度可用性的服務,用於Hadoop操作的管理,而且很多Hadoop組件都依賴它。
Oozie—— Oozie是一個北極測很難過到Hadoop軟體棧中的可擴展的Workflow系統。用於協調多個MapRece作業的執行。它能夠處理大量的復雜性,基於外部事件來管理執行。
Pig——Pig是對MapRece編程復雜性的抽象,Pig平台包含用於分析Hadoop數據集的執行環境和腳本語言(Pig Latin)。它的編譯器將Pig Latin翻譯為MapRece程序序列。
Hive——類似於SQL的高級語言,用於執行對存儲在Hadoop中數據的查詢,Hive允許不熟悉MapRece的開發人員編寫數據查詢語句,它會將翻譯為Hadoop中的MapRece作業。類似於Pig。Hive是一個抽象層,適合於較熟悉SQL而不是java編程的資料庫分析師。
Hadoop生態系統中還包含一些用於與其他企業級應用進行集成的框架,例如上圖所示的Sqoop和Flume:
Sqoop是一個連通性工具,用於在關系型資料庫和數據倉庫Hadoop之間移動數據。Sqoop利用資料庫來描述導入/導出數據的模式,並使用MapRece實現並行操作和容錯。
Fulme是一個分布式的、具有可靠性和高可用性的服務,用於從單獨的機器上將大量數據高效的收集、聚合並移動到HDFS中。它給予一個簡單靈活的架構,童工流式數據操所。它藉助於簡單可擴展的數據模型,允許將來自企業中多台機器上的數據移到Hadoop中。
❽ Bigtable具體是怎樣一個東西
1、針對標題。BigTable是有部分關系模型支持的,更像是表,底層存儲是GFS。與Maprece的關系就跟GFS與MapRece的關系沒啥區別吧。
2、針對內容問題,沒有仔細看storm,但是從大致個人了解來說,storm是一個為支持實時計算的框架。而Hadoop是更適用於批量計算。不太同類,沒啥好比較的吧。
BigTable是非關系的資料庫,是一個稀疏的、分布式的、持久化存儲的多維度排序Map。Bigtable的設計目的是可靠的處理PB級別的數據,並且能夠部署到上千台機器上。Bigtable已經實現了下面的幾個目標:適用性廣泛、可擴展、高性能和高可用性。Bigtable已經在超過60個Google的產品和項目上得到了應用,包括 Google Analytics、GoogleFinance、Orkut、Personalized Search、Writely和GoogleEarth。這些產品對Bigtable提出了迥異的需求,有的需要高吞吐量的批處理,有的則需要及時響應,快速返回數據給最終用戶。它們使用的Bigtable集群的配置也有很大的差異,有的集群只有幾台伺服器,而有的則需要上千台伺服器、存儲幾百TB的數據。
❾ C++問題:
1. C++可以描述為:包括兩部分,C和C++。所以,用C++解決問題,無非就是演算法與對象。也就是面向過程的演算法,以及面象對象的抽象。
2。建議你學習一下面向對象,UML,設計模式等。
3。解決此問題,你可以按著C的思考方式,只不過就是在那個基礎上,將它封裝成類。
4。你說的那些都是C++標准庫中的,也就是STL,你可以搜索一下STL方面的書。
5。這個。。。不知道你要哪方面的,你想干什麼。我現在正在寫個指針,就把這個先粘上吧。
template<typename _DLG,typename _DATA>
struct TPage
{
typedef TPage<typename _DLG,typename _DATA> _ThisType;
_DLG * _p;
int _nRef;
TPage()
{
_p=NULL;
_nRef=0;
}
~TPage()
{
if(_p)
{
_p->DestroyWindow();
delete _p;
_p=NULL;
if(_nRef)
{
nRef--;
}
}
}
void Initial(_DATA datatype,CWnd* pWnd)
{
CRect rect;
pWnd->GetWindowRect(rect);
_p=new _DLG(pWnd);
_p->SetData(datatype);
_p->Create(_DLG::IDD,pWnd);
CRect rectX;
GetWindowRect(_p->GetSafeHwnd(),rectX);
int nWidth=rectX.Width();
int nHeight=rectX.Height();
rectX.left=rect.left+(rect.Width()-rectX.Width())/2;
rectX.right=rectX.left+nWidth;
rectX.top=rect.top+(rect.Height()-nHeight)/2;
rectX.bottom=rect.top+nHeight;
_p->MoveWindow(rectX);
_p->ShowWindow(nRef?SW_HIDE:SW_SHOW);
nRef++;
_nRef=nRef;
}
void Initial(_DATA datatype,CRect rect,CWnd* pWnd)
{
_p=new _DLG(pWnd);
_p->SetData(datatype);
_p->Create(_DLG::IDD,pWnd);
CRect rectX;
GetWindowRect(_p->GetSafeHwnd(),rectX);
int nWidth=rectX.Width();
int nHeight=rectX.Height();
rectX.left=rect.left+(rect.Width()-rectX.Width())/2;
rectX.right=rectX.left+nWidth;
rectX.top=rect.top+(rect.Height()-nHeight)/2;
rectX.bottom=rect.top+nHeight;
_p->MoveWindow(rectX);
_p->ShowWindow(nRef?SW_HIDE:SW_SHOW);
nRef++;
}
_DLG * operator -> ()
{
return _p;
}
_ThisType& operator =(_ThisType & _t)
{
_p=_t._p;
return *this;
}
void SaveData(int nWhich)
{
if (nWhich==_nRef-1 && nWhich!=-1)
{
_p->SaveData();
}
}
};
我要做一個對話框的布局。我感覺太麻煩,於是寫了這么個東西,用處不太大,相當於智能指針。你先將就看吧。