Time of Update: 2018-12-03
C++線程鎖的封裝,主要提供lock,unlock,require等操作,需要注意的是線程重複擷取鎖的問題,設定了一個count的計數器,該計算機之所以不考慮++,--的原子操作的問題,是因為該計數器本身就在lock與unlock中,所以本身是安全執行緒的。另外mutable count是將count的變化操作防止在const方法中,保證方法語義。class TC_ThreadCond;/** * 線程互斥對象 */struct TC_ThreadMutex_Exception :
Time of Update: 2018-12-03
愈發緊迫的挑戰現今,單台機器擁有多個獨立的計算單元已經太常見了,這點在伺服器的處理器上表現尤為明顯,據 AMD 的一張 2012-2013 伺服器路線圖顯示,伺服器處理器的核心數將在 2013 年達到 20 顆之多。合理的利用 CPU 資源已是一個不得不考慮的問題。不少 C++ 程式員依然使用著多執行緒模式,但是對多線程的掌控並不是一件容易的事情,開發中容易出錯、難以調試。有些開發人員為了避免多線程帶來的複雜度而棄用多線程,有些開發人員則另投其他語言陣營,例如
Time of Update: 2018-12-03
C# 可以使用的 .Net 類庫之龐大,不得不感慨一下。對於讀取檔案這一部分,可以使用的方法很多,特將想到和看到的方法收集在此,用到時可以查一查,溫習一下。以文字檔為例,可以有多種方法。方法一:System.IO.File.ReadAllTextstring content = System.IO.File.ReadAllText(fn);方法二:Stream Stream stream = File.OpenRead(fn); int bytesToRead = 1
Time of Update: 2018-12-03
++i,在使用i之前,進行自加動作;i++,在使用i之後,進行自加動作。例如:(1)i=1,j=i++;//j=i++,即為j先引用了i的值,然後i完成++的動作 printf("%d,%d\n",i,j);//結果為i=2,j=1 (2)i=1,j=++i;//j=++i,即為i先完成++的動作,然後j再引用 printf("%d,%d\n",i,j);//結果為i=2,j=2
Time of Update: 2018-12-03
C++中MFC的訊息映射機制類似C#的事件驅動機制。對比如下: C++:函數原型,函數實現,用來關聯訊息和訊息響應函數的宏。 C#: 編寫處理函數(相當於C++的前兩個),註冊事件(相當於C++的最後一個)。 C++執行個體: //標頭檔CMFCTestView.h // Generated message map functions protected: //{{AFX_MSG(CMFCTestView)
Time of Update: 2018-12-03
如果沒有自訂複製建構函式,則系統會建立預設的複製建構函式,但系統建立的預設複製建構函式只會執行“淺拷貝”,即將被拷貝對象的資料成員的值一一賦值給新建立的對象,若該類的資料成員中有指標成員,則會使得新的對象的指標所指向的地址與被拷貝對象的指標所指向的地址相同,delete該指標時則會導致兩次重複delete而出錯。下面是樣本://animal.h#include<string>#include<iostream>using namespace std;class
Time of Update: 2018-12-03
今天閑來無事,晒晒自己最近從項目中學的東西吧。重點是感受啊,這些東西以前也接觸過,但是不會活學活用,導致需要的時候忘的差不多了。 1)Eval綁定可以綁定一個單獨的欄位 Eval("houseID")也可以綁定一個函數 <%# houseEdit(Eval("infoType"), Eval("houseID"))%> 2)Bind綁定 兩者的區別:Eval 方法是靜態單向(唯讀)方法,所以Eval
Time of Update: 2018-12-03
C語言編譯全過程 編譯的概念:編譯器讀取來源程式(字元流),對之進行詞法和文法的分析,將進階語言指令轉換為功能等效的彙編代碼,再由組譯工具轉換為機器語言,並且按照作業系統對可執行檔格式的要求連結產生可執行程式。 編譯的完整過程:C來源程式-->先行編譯處理(.c)-->編譯、最佳化程式(.s、.asm)-->組譯工具(.obj、.o、.a、.ko)-->連結程式(.exe、.elf、.axf等)1. 編譯預先處理
Time of Update: 2018-12-03
父視窗:using System;using System.Collections.Generic;using System.ComponentModel;using System.Data;using System.Drawing;using System.Text;using System.Windows.Forms;namespace mail...{ public partial class Form1: Form ...{ private
Time of Update: 2018-12-03
Hello World1.建立一個WinForm項目,項目->增加新項->選擇Crystal 報表2.使用報表精靈->建立新串連->資料庫檔案->選擇一個Access資料庫db.mdb3.選中一個表:Article添加到選定的表中,下一步4.選擇可用欄位添加到要顯示的欄位中。不點下一步,直接點完成。5.這樣就建立了一個報表檔案,為報表做一些美化。
Time of Update: 2018-12-03
雖然Revit的使用者和開發目前在中國都很少,但是這是個趨勢。未來Revit會在許多方面取代Autocad做CAD二次開發的,在中國也很吃香。但是使用C++難倒了許多人。而Revit二次開發可以使用C#並且上手非常容易。假如你是一個C#程式員,正在確定自己未來的方向,不妨考慮做個Revit二次開發人員。這是我剛剛建立的Revit二次開發論壇http://revit.5d6d.com目前國內還沒有成熟的Revit二次開發產品,我們共同努力吧。
Time of Update: 2018-12-03
最近一段時間總是用C和WEBSERVICE進行一些資料的互動,所以不得不用XML這些東西,用C寫死剖析器總是不太好,稍做更改就是改程式,太麻煩。 所以,在用這些之前,自已寫了點XML的解析小測試,感覺不是很難,拿出來和大家分享,如果您是高手,請不要見笑,如果您從中學到了點東西,那我非常高興,不妥之處警請指正: #include <libxml/xmlreader.h>#include <stdio.h>#include <string.h>#include
Time of Update: 2018-12-03
在我的那篇“C++中虛解構函式的作用”中我說明了為什麼作為基類的類的解構函式必須是虛函數,同時也指出:為了避免產生虛函數表,如果類不是基類的話,解構函式就不需要聲明為虛函數。 但是,我們不能預料使用者的行為,你不敢肯定使用者是否會從你的類去派生自己的類。如果使用者以一個基類指標去刪除一個衍生類別的對象,就會發生衍生類別的解構函式不被調用的情況。這樣做的危險性我想大家都知道。當然,你可以在類的說明文檔中,甚至是在類的標頭檔中,說明你寫的類不能作為基類。可是,誰又能保證,使用者會仔細閱讀這些
Time of Update: 2018-12-03
如何用C++編程獲得某台機器的IP地址?編譯:Northtibet下載原始碼 對於這個古老的問題,VC知識庫的精華區以及以往的線上雜誌中都有詳盡不一的描述。本文提供的方法是一個比較完整的解決方案,並附有詳細的實現細節。希望大家對這個問題有徹底的認識。其實,如果你熟悉 Windows 的Sockets
Time of Update: 2018-12-03
C語言中有一種長度不確定的參數,形如:"…",它主要用在參數個數不確定的函數中,我們最容易想到的例子是printf函數。 原型: int printf( const char *format [, argument]... ); 使用例: printf("Enjoy yourself everyday!/n"); printf("The value is %d!/n", value);
Time of Update: 2018-12-03
C++ new用法的正確方法應該如何操作?在這篇文章中我們將會根據其兩種不同的含義分別介紹一下它的影音方法,希望能給大家帶來一些協助。C++程式設計語言中有一種叫做new的術語。不過這一概念是比較模糊的,有些人把它理解為new函數,但是有的人又會把它理解為new運算子。那麼它的真正含義又是如何的呢?在這裡我們將會通過對C++ new用法的介紹,協助大家一起分析一下。 C++ new用法之一 new運算子最常用的是作為運算子的new,比如:string *str = new
Time of Update: 2018-12-03
標準串的:/********************************************the tokenize function for std::string*********************************************/#include <string>#include <vector>#include <iostream>using namespace std;typedef
Time of Update: 2018-12-03
(1) Java有記憶體回收機制,當然也就沒有C++的解構函式。但是,可控制性和C++相比就差了一點,而且也不是說有了記憶體回收,就不會產生記憶體流失。由於相互引用等原因可能造成對象的生存周期過長,記憶體回收失效。對象記憶體的回收,個人認為應該是由程式員來掌握的事情。C++可以用auto_ptr,shared_ptr等智能指標來完成自動析構,當然前提是你要熟悉他們的實現機制和應用場合(2) Java中所有的對象都是分配在堆上,在Java中只有控制代碼,也就是引用,沒有指標。
Time of Update: 2018-12-03
(1) vtable的影響 導致一個對象執行個體增大4個位元組 #include <cstdlib> #include <iostream> using namespace std; class A { int a; }; class B { virtual void say() { } int b; }; int main(int argc, char *argv[]) {
Time of Update: 2018-12-03
舞伴問題描述如下:就是說有個PARTY舞會需要進行跳舞,當然是男的跟女的搭檔了。就是男的一個隊列,女的一個隊列,然後互相出隊列,進行匹配跳舞,如果男的隊列跟女的隊列人一樣多,則輸出 匹配完美結束,若最後男的剩下或者女的剩下,此時輸出剩下的隊列中第一個人的名字,比如I,則輸出