Time of Update: 2018-12-04
多線程對共同資源的訪問,往往會造成資料的混亂和不可預料的結果,因此一般需要加鎖訪問進行互斥訪問。所謂“互斥訪問”是指,一段代碼或者公開變數,在一個時刻只允許一個線程去訪問,其他的線程需要等待,直到改線程處理完畢並通知下一個等待的線程去處理。1、可以用“Lock”來提供代碼的互斥訪問:lock (一個類的樣本、靜態變數的類名){ // 代碼}2、可以用“Monitor”來提供變數的互斥訪問:int money;Monitor.Enter(money);//
Time of Update: 2018-12-04
也許你曾經遇到過:一個線程做事情,其他線程等待,那麼有可能因為不做事情的線程在等待,而浪費掉時間。我們可以通過線程池ThreadPool來解決,使用ThreadPool.QueueUserWorkItem(回呼函數,object),將參數封裝在一個類的對象中,傳給回呼函數去執行。TheadPool的用法:1、建立一個ManualResetEvent的對象,就像一個號誌,指示線程的掛起和執行;2、ManualResetEvent對象建立時,可以指定預設狀態:true為有訊號,false為無訊號;3
Time of Update: 2018-12-04
每隔一定的時間,觸發去做指定的事情,可以用timer類。Timer timer = new Timer(timerDelegate, ParamObject, 1000, 1000) 其中,1、第一個參數是要執行的方法2、第二個參數是回調方法要使用的對象資訊;3、第三個參數是延時啟動的時間間隔,“0”表示立即啟動;4、第四個參數是Timer的Interval。using System;using System.Collections.Generic;using
Time of Update: 2018-12-04
C語言擷取系統時間的幾種方式 C語言中如何擷取時間?精度如何?1 使用time_t time( time_t * timer ) 精確到秒2 使用clock_t clock() 得到的是CPU時間 精確到1/CLOCKS_PER_SEC秒3 計算時間差使用double difftime( time_t timer1, time_t timer0 )4 使用DWORD GetTickCount() 精確到毫秒5 如果使用MFC的CTime類,可以用CTime::GetCurrentTime()
Time of Update: 2018-12-04
轉自:http://hi.baidu.com/luckymouse2009/blog/item/80042808ee129da62fddd47e.html C++ IO標準庫 檔案操作2009-07-01 14:23寫一個在一個流中同時讀寫檔案的小程式string login , user;fstream logfile("log.dat",fstream::in | fstream::out | fstream::trunc); if (!logfile){
Time of Update: 2018-12-04
昨天晚上看到劉江的blog又補充了好幾大段,今天早上又看到雲風的人肉trackback,果然還是這種話題引人關注。 雲風先是提了一下所謂C++帶來的思想包袱(文言文曰“心智包袱”)問題,然後重重地引用了Linus的話:“關鍵是設計”,其實他是在暗示:好的設計C同樣能做出來,不勞C++大駕;而C++一旦出面,就要讓人背上額外的思想包袱。 我明確地表個態,在系統級程式設計中,事實就是這樣的。
Time of Update: 2018-12-04
由於時間片的原因,雖然所有線程在微觀上是串列執行的,但在宏觀上可以認為是並存執行。線程有兩種類型:前台和後台。我們可以通過線程屬性IsBackground=false來指定線程的前後台屬性(預設是前台線程)。區別是:前台線程的程式,必須等所有的前台線程運行完畢後才能退出;而後台線程的程式,只要前台的線程都終止了,那麼背景線程就會自動結束並推出程式。用法方向:一般前台線程用於需要長時間等待的任務,比如監聽用戶端的請求;後台線程一般用於處理時間較短的任務,比如處理用戶端發過來的請求資訊。【前台線程】
Time of Update: 2018-12-04
建立線程時,需要指定線程入口,即通過ThreadStart指定線程要去執行的“函數”或者“過程”。using System;using System.Collections.Generic;using System.Text;using System.Threading;namespace Demo{ public class ThreadClass { public void ThreadFunction() {
Time of Update: 2018-12-04
C語言的習慣認識,在C++中,有一些地方會出錯。在extern const連用的時候遇到一則。在C++中直接使用const,隱含著static的寓意。下面的程式在C語言編譯沒問題。但在C++中則編譯不通過,使用的編譯器是:MinGW gcc 或 VS2008。檔案a.cpp(或是a.c) 中const int i = 123; //因為這裡隱含的意思是 static const...檔案main.cpp(或是main.c) 中extern const int
Time of Update: 2018-12-04
特註:運行該程式需要設定VC6.0環境Project->Setting->C/C++->Category->Code Generation->Using Run-time library->Debug MultiThreaded#include <iostream>#include <list>#include <windows.h>#include <process.h>using namespace std;
Time of Update: 2018-12-04
一、不均勻分布的香,每根香燒完的時間是一個小時,你能用什麼方法來確定一段15分鐘的時間? 第一根點燃兩頭,第二根只點一頭。當第一根燒完時,時間過去了30分鐘,所以第二根還能燒30分鐘。這時點燃第二根的另外一頭,第二根香還能燒的時間就是15分鐘。 二、普查員問一女人,“你有多少個孩子,他們多少歲?”。
Time of Update: 2018-12-04
用 c 語言如何能得到指定介面的ip地址 winsocket的描述如下:5.1.6 getsockname()簡述: 擷取一個套介面的本地名字。 #include <winsock.h>; int PASCAL FAR getsockname( SOCKET s, struct sockaddr FAR* name, int FAR* namelen); s:標識一個已捆綁套介面的描述字。 name:接收套介面的地址(名字)。 namelen:名字緩衝區長度。注釋:
Time of Update: 2018-12-04
對於普通類型的對象來說,它們之間的複製是很簡單的,例如: int a=100; int b=a; 而類對象與普通對象不同,類對象內部結構一般較為複雜,存在各種成員變數。下面看一個類對象拷貝的簡單例子。 #include <iostream>using namespace std;class CA{ public: CA(int b) { a=b; } void Show () { cout<<a<<endl;
Time of Update: 2018-12-04
這個程式僅供編程參考若想在平時用,請下載微軟的wallpaper changer我這個程式實現了定時更換案頭背景的功能命令列 wallpaper "your images' directory path" time_in_minute 編程要點findfirstfile findnextfile 尋找影像檔SystemParametersInfo 修改系統資訊,在這兒當然是案頭背景註冊表操作 儲存資訊 如果做得實用,應加入開機啟動功能,自然還要gui//wallpaper.c//by
Time of Update: 2018-12-04
這是一個較老的不太複雜的演算法/* This algorithm is mentioned in the ISO C standard, here extended for 32 bits. */intrand_r (unsigned int *seed){ unsigned int next = *seed; int result; next *= 1103515245; next += 12345; result = (unsigned int) (next / 65536)
Time of Update: 2018-12-04
能整理大部分無用檔案 #!/usr/bin/python#syscleaner.pyimport osimport os.path#delete files and directory recursivelydef itedel(dir): print('in dir :'+dir) for doc in os.listdir(dir): try: if(os.path.isdir(doc)): itedel(dir+
Time of Update: 2018-12-04
4. 磁碟檔案的開啟和關閉 開啟 ofstream outfile; if(outfile.open("f1.data",ios::app)==0) // 開啟 cout<<"開啟失敗!"; …………………… outfile.close(); //關閉 5. 檔案寫入#include <fstream&
Time of Update: 2018-12-04
(點擊此處,接上篇)有時候,即使編譯器完全心甘情願地 inline 一個函數,它們還是會為這個 inline function 產生函數本體。例如,如果你的程式要持有一個 inline function 的地址,編譯器通常必然為它產生一個 outlined 函數本體。它們怎麼能拿得出一個指向根本不存在的函數的指標呢?再加上編譯器一般不會對通過函數指標的調用進行 inlining(內聯化)的事實,這就意味著,對一個 inline function
Time of Update: 2018-12-04
Item 31: 最小化檔案之間的 compilation dependencies(編譯依賴)作者:Scott Meyers譯者:fatalerror99 (iTePub's Nirvana)發布:http://blog.csdn.net/fatalerror99/你進入到你的 C++ 程式中,並對一個 class 的 implementation(實現)進行了細微的改變。提醒你一下,不是 class 的 interface(介面),只是 implementation(實現),僅僅是
Time of Update: 2018-12-04
普通類對象的記憶體布局首先我們從普通類對象的記憶體布局開始。C000為一個空類,定義如下:struct C000{}; 運行如下代碼列印它的大小及對象中的內容。PRINT_SIZE_DETAIL(C000) 結果為:The size of C000 is 1The detail of C000 is cc