原创 多線程編程(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