原创 多線程編程(4) - 從 CreateThread 說起[續二]

function CreateThread( lpThreadAttributes: Pointer; dwStackSize: DWORD; lpStartAddress: TFNThreadStartRoutine;

原创 多線程編程(8) - 多線程同步之 CriticalSection(臨界區)

先看一段程序, 代碼文件: unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms

原创 多線程編程(17) - 多線程同步之 WaitableTimer (等待定時器對象)[續三]

根據 WaitableTimer 的主要功用, 現在再把它放在 "線程同步" 的話題中討論有點不合適了, 就要結束它. //重新看看那個 APC 回調函數的格式: procedure TimerAPCProc( lpArgToComp

原创 SQL Server 索引結構及其使用(四)

聚集索引的重要性和如何選擇聚集索引   在上一節的標題中,筆者寫的是:實現小數據量和海量數據的通用分頁顯示存儲過程。這是因爲在將本存儲過程應用於“辦公自動化”系統的實踐中時,筆者發現這第三種存儲過程在小數據量的情況下,有如下現象: 1、分

原创 多線程編程(13) - 多線程同步之 Event (事件對象)

據說 Event(事件對象) 是多線程最原始的同步手段, 我覺得它是最靈活的一個.Event 對象(的句柄表)中主要有兩個布爾變量, 從它的建立函數中可以看得清楚: function CreateEvent( lpEventAttri

原创 多線程編程(16) - 多線程同步之 WaitableTimer (等待定時器對象)[續二]

喝酒醉了一天, 重裝系統一天, 兩天沒上博客了; 繼續學習...想過沒有? WaitableTimer 是在 "定時等待", 前面例子中的 WaitForSingleObject 等待函數 "也在等待", 這就 "雙重等待" 了, 這不好

原创 多線程編程(15) - 多線程同步之 WaitableTimer (等待定時器對象)[續]

本次專門研究下 SetWaitableTimer 的第二個參數(起始時間).它有正值、負值、0值三種情況, 前面已用過 0值.先學習負值(相對時間), 也就是從當前算起隔多長時間開始執行.這個相對時間是已 1/100 納秒爲單位的, 譬如

原创 SQL 獲取某月 自然天數

方法1: create function fn_getDayByYearMonth(@year int,@month int)  returns int  begin   declare @date datetime   decl

原创 sql優化、索引的建立和運用以及多表連接建索引的拙劣見解

一、問題的提出     在應用系統開發初期,由於開發數據庫數據比較少,對於查詢SQL語句,複雜視圖的編寫等體會不出SQL語句各種寫法的性能優劣,但是如果將應用系統提交實際應用後,隨着數據庫中數據的增加,系統的響應速度就成爲目前系統需要解決

原创 多線程編程(1) - 先入門再說

多線程應該是編程工作者的基礎技能, 但這個基礎對我來講的確有點難(起碼昨天以前是這樣). 開始本應該是一篇洋洋灑灑的文字, 不過我還是提倡先做起來, 在嘗試中去理解. 先試試這個: procedure TForm1.Button1Cli

原创 多線程編程(11) - 多線程同步之 Mutex (互斥對象)[續]

Mutex 作爲系統核心對象是可以跨進程的(臨界區就不行), 我們可以利用互斥對象禁止程序重複啓動.工作思路:先用 OpenMutex 嘗試打開一個自定義名稱的 Mutex 對象, 如果打開失敗說明之前沒有這個對象存在;如果之前沒有這個對

原创 多線程編程(5) - 從 CreateThread 說起[續三]

function CreateThread( lpThreadAttributes: Pointer; dwStackSize: DWORD; lpStartAddress: TFNThreadStartRoutine; {入

原创 多線程編程(6) - 從 CreateThread 說起[續四]

function CreateThread( lpThreadAttributes: Pointer; dwStackSize: DWORD; {堆棧大小} lpStartAddress: TFNThreadStartRou

原创 多線程編程(3) - 從 CreateThread 說起[續]

function CreateThread( lpThreadAttributes: Pointer; dwStackSize: DWORD; lpStartAddress: TFNThreadStartRoutine;

原创 多線程編程(9) - 認識等待函數 WaitForSingleObject

一下子跳到等待函數 WaitForSingleObject, 是因爲下面的 Mutex、Semaphore、Event、WaitableTimer 等同步手段都要使用這個函數; 不過等待函數可不止 WaitForSingleObject