原创 Win32多線程之多線程設計成功的關鍵

多線程設計成功的關鍵是: 1.各線程的數據要分離開來,避免使用全局變量; 2.不要在線程之間共享GDI對象; 3.確保你知道各線程的狀態,不要徑自結束程序而不等待各個線程的結束; 4.讓主線程處理用戶界面(GUI)。

原创 Win32多線程之最小鎖定時間

在任何關於同步機制的討論中,不論是在Win32或Unix或其他操作系統,你一定會一再地聽到這樣一條規則: 不要長時間鎖住一份資源   如果你一直讓資源被鎖定,你就會阻止其他線程的執行,並把整個程序帶到一個完全停止的狀態。以critical

原创 Win32多線程之設計多線程程序需要注意的問題

1.簡單和安全大於複雜和速度; 程序與線程的關係越緊密,越容易產生錯誤並引起race condition。

原创 Win32多線程之WaitForMultipleObjects

Win32函數中的WaitForMultipleObjects()允許你在同一時間等待一個以上的對象。你必須將一個由handles組成的數組交給此函數,並指定要等待其中一個對象或是全部的對象,下面就是這個函數的原型: DWORD Wa

原创 Win32多線程之標準消息循環

Windows程序中的標準消息循環看起來如下所示: while(GetMessage(&msg, NULL, 0, 0) ) {       TranslateMessage(&msg);       DispatchMessa

原创 Win32多線程之同步控制

    寫多線程程序的一個最具挑戰性的問題就是,如何讓一個線程和另一個線程合作。除非你讓它們同心協力。否則必然會出現“race conditions”(競爭條件)和“data corrupton”(數據被破壞)的情況。     在典型的辦

原创 Linux指令學習

最近開始學習Linux,把常用指令記錄下來,以備查看。   1.查看所有進程:           ps  -ef       若要查看指定的指令:    ps  -ef|grep    process_name            2

原创 Win32多線程之後臺線程

後臺線程和主線程完全分開。它使用不同的數據結構,並且是非交談式的。任何東西如果要畫在屏幕上,都必須送出一個消息給主線程(GUI線程),告訴它去做這件

原创 Win32多線程之主線程

主線程:    程序啓動後就執行的那個線程稱爲主線程(primary thread)。主線程有兩個特點:      第一,它不許負責GUI(Graphic User Interface)程序中的主消息循環;      第二,這一線程結束(

原创 Win32多線程之錯誤處理

   經驗顯示,線程的各種相關函數是錯誤高危險羣,而適當的錯誤處理可以阻止挫敗併產生一個比較可信賴的程序。    

原创 Win32多線程之微軟的多線程模型

Win32說明文件一再強調線程分爲GUI線程和worker線程兩種。GUI線程負責建造窗口以及處理主消息循環。worker線程負責執行純粹的運算工作,如重新計算或重新編頁等等,它們會導致主線程的消息隊列失去反應,一般而言,GUI線程絕對不

原创 Win32多線程之被激發的對象(Signaled Objects)

         核心對象在“Win32多線程之核心對象”已經講過,如文件,進程,互斥器(Mutexes)等。這些對象的狀態都可能是線程關心的東西。信號量(semaphores)和互斥器(mutexes)可以記錄紅綠燈狀態,文件對象可以告

原创 Win32多線程之死鎖(DeadLock)

爲每一個鏈表(linked list)準備一個critical section之後(關於鏈表,請參看”Win32多線程之臨界區(Critical Sections)“,我卻開始了另一個問題。請看下面這個用來交換兩個鏈表內容的函數: voi

原创 Win32多線程之互斥器(Mutexes)

  Win32的Mutex用途和critical section非常類似,但是它犧牲速度以增加彈性,或許你已經猜到了,mutex 是MUTual EXclusion的縮寫。一個時間內只能夠有一個線程擁有mutex,就好像同一時間內只能夠有

原创 Win32多線程之等待一個線程的結束(WaitForSingleObject)

  由於線程停工是操作系統的責任,當然操作系統也有責任讓其他線程知道某個線程停工了。    Win32提供了一個名爲WaitForSingleObject()的函數。他的第一個參數是個核心對象(如線程)的handle,爲了方便討論,我把即