📄 sync__w32_8h-source.html
字号:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"><html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1"><title>FastDB: sync_w32.h Source File</title><link href="doxygen.css" rel="stylesheet" type="text/css"></head><body><!-- Generated by Doxygen 1.3.5 --><div class="qindex"><a class="qindex" href="index.html">Main Page</a> | <a class="qindex" href="hierarchy.html">Class Hierarchy</a> | <a class="qindex" href="annotated.html">Class List</a> | <a class="qindex" href="files.html">File List</a> | <a class="qindex" href="functions.html">Class Members</a></div><h1>sync_w32.h</h1><div class="fragment"><pre>00001 <span class="comment">//-< SYNC_W32.H >----------------------------------------------------*--------*</span>00002 <span class="comment">// FastDB Version 1.0 (c) 1999 GARRET * ? *</span>00003 <span class="comment">// (Main Memory Database Management System) * /\| *</span>00004 <span class="comment">// * / \ *</span>00005 <span class="comment">// Created: 20-Nov-98 K.A. Knizhnik * / [] \ *</span>00006 <span class="comment">// Last update: 20-Dec-98 K.A. Knizhnik * GARRET *</span>00007 <span class="comment">//-------------------------------------------------------------------*--------*</span>00008 <span class="comment">// Intertask synchonization primitives</span>00009 <span class="comment">//-------------------------------------------------------------------*--------*</span>00010 00011 <span class="preprocessor">#ifndef __SYNC_W32_H__</span>00012 <span class="preprocessor"></span><span class="preprocessor">#define __SYNC_W32_H__</span>00013 <span class="preprocessor"></span>00014 00015 <span class="preprocessor">#ifdef SET_NULL_DACL</span>00016 <span class="preprocessor"></span><span class="keyword">class </span>FASTDB_DLL_ENTRY dbNullSecurityDesciptor { 00017 <span class="keyword">public</span>:00018 SECURITY_DESCRIPTOR sd;00019 SECURITY_ATTRIBUTES sa; 00020 00021 dbNullSecurityDesciptor() { 00022 InitializeSecurityDescriptor(&sd, SECURITY_DESCRIPTOR_REVISION);00023 SetSecurityDescriptorDacl(&sd, TRUE, NULL, FALSE);00024 sa.nLength = <span class="keyword">sizeof</span>(sa);00025 sa.bInheritHandle = TRUE; 00026 sa.lpSecurityDescriptor = &sd;00027 }00028 00029 <span class="keyword">static</span> dbNullSecurityDesciptor instance;00030 };00031 <span class="preprocessor">#define FASTDB_SECURITY_ATTRIBUTES &dbNullSecurityDesciptor::instance.sa</span>00032 <span class="preprocessor"></span><span class="preprocessor">#else </span>00033 <span class="preprocessor"></span><span class="preprocessor">#define FASTDB_SECURITY_ATTRIBUTES NULL</span>00034 <span class="preprocessor"></span><span class="preprocessor">#endif</span>00035 <span class="preprocessor"></span>00036 <span class="keyword">class </span>FASTDB_DLL_ENTRY dbMutex { 00037 CRITICAL_SECTION cs;00038 <span class="keywordtype">bool</span> initialized;00039 <span class="keyword">public</span>:00040 dbMutex() {00041 InitializeCriticalSection(&cs);00042 initialized = <span class="keyword">true</span>;00043 }00044 ~dbMutex() {00045 DeleteCriticalSection(&cs);00046 initialized = <span class="keyword">false</span>;00047 }00048 <span class="keywordtype">bool</span> isInitialized() { 00049 <span class="keywordflow">return</span> initialized;00050 }00051 <span class="keywordtype">void</span> lock() {00052 <span class="keywordflow">if</span> (initialized) { 00053 EnterCriticalSection(&cs);00054 }00055 }00056 <span class="keywordtype">void</span> unlock() {00057 <span class="keywordflow">if</span> (initialized) { 00058 LeaveCriticalSection(&cs);00059 }00060 }00061 };00062 00063 <span class="preprocessor">#define thread_proc WINAPI</span>00064 <span class="preprocessor"></span>00065 <span class="keyword">class </span>FASTDB_DLL_ENTRY dbThread { 00066 HANDLE h;00067 <span class="keyword">public</span>:00068 <span class="keyword">typedef</span> void (thread_proc* thread_proc_t)(<span class="keywordtype">void</span>*);00069 00070 <span class="keywordtype">void</span> create(thread_proc_t f, <span class="keywordtype">void</span>* arg) { 00071 DWORD threadid;00072 h = CreateThread(FASTDB_SECURITY_ATTRIBUTES, 0, LPTHREAD_START_ROUTINE(f), arg,00073 0, &threadid);00074 }00075 <span class="keyword">enum</span> ThreadPriority { 00076 THR_PRI_LOW, 00077 THR_PRI_HIGH00078 };00079 00080 <span class="keywordtype">void</span> setPriority(ThreadPriority pri) { 00081 SetThreadPriority(h, pri == THR_PRI_LOW ? THREAD_PRIORITY_IDLE : THREAD_PRIORITY_HIGHEST);00082 }00083 00084 <span class="keywordtype">void</span> join() { 00085 WaitForSingleObject(h, INFINITE);00086 CloseHandle(h);00087 h = NULL;00088 }00089 <span class="keywordtype">void</span> detach() { 00090 <span class="keywordflow">if</span> (h != NULL) { 00091 CloseHandle(h);00092 h = NULL;00093 }00094 } 00095 dbThread() { 00096 h = NULL; 00097 }00098 ~dbThread() { 00099 <span class="keywordflow">if</span> (h != NULL) { 00100 CloseHandle(h);00101 }00102 }00103 <span class="keyword">static</span> <span class="keywordtype">int</span> numberOfProcessors() { 00104 <span class="preprocessor">#ifdef PHAR_LAP</span>00105 <span class="preprocessor"></span> <span class="keywordflow">return</span> 1;00106 <span class="preprocessor">#else</span>00107 <span class="preprocessor"></span> SYSTEM_INFO sysinfo;00108 GetSystemInfo(&sysinfo);00109 <span class="keywordflow">return</span> sysinfo.dwNumberOfProcessors;00110 <span class="preprocessor">#endif</span>00111 <span class="preprocessor"></span> }00112 };00113 00114 <span class="keyword">class </span>FASTDB_DLL_ENTRY dbProcessId { 00115 DWORD tid;00116 <span class="keyword">public</span>:00117 <span class="keywordtype">bool</span> operator != (dbProcessId <span class="keyword">const</span>& other)<span class="keyword"> const </span>{ 00118 <span class="keywordflow">return</span> tid != other.tid;00119 }00120 00121 <span class="keywordtype">void</span> clear() { 00122 tid = 0;00123 }00124 00125 <span class="keyword">static</span> dbProcessId getCurrent() {00126 dbProcessId curr;00127 curr.tid = GetCurrentThreadId();00128 <span class="keywordflow">return</span> curr;00129 }00130 };00131 00132 <span class="keyword">class </span>FASTDB_DLL_ENTRY dbInitializationMutex { 00133 HANDLE m;00134 <span class="keyword">public</span>: 00135 <span class="keyword">enum</span> initializationStatus { 00136 InitializationError, 00137 AlreadyInitialized,00138 NotYetInitialized00139 };00140 initializationStatus initialize(<span class="keywordtype">char</span> <span class="keyword">const</span>* name) { 00141 initializationStatus status;00142 m = CreateMutex(FASTDB_SECURITY_ATTRIBUTES, <span class="keyword">true</span>, name);00143 <span class="keywordflow">if</span> (GetLastError() == ERROR_ALREADY_EXISTS) { 00144 status = WaitForSingleObject(m, INFINITE) == WAIT_OBJECT_0 00145 ? AlreadyInitialized : InitializationError;00146 ReleaseMutex(m);00147 } <span class="keywordflow">else</span> <span class="keywordflow">if</span> (m != NULL) { 00148 status = NotYetInitialized;00149 } <span class="keywordflow">else</span> { 00150 status = InitializationError;00151 }00152 <span class="keywordflow">return</span> status;00153 }00154 <span class="keywordtype">void</span> done() { 00155 ReleaseMutex(m);00156 }00157 <span class="keywordtype">bool</span> close() {00158 CloseHandle(m);00159 <span class="keywordflow">return</span> <span class="keyword">false</span>;00160 }00161 <span class="keywordtype">void</span> erase() { 00162 close();00163 }00164 dbInitializationMutex() { 00165 m = NULL;00166 }00167 };00168 00169 00170 <span class="keyword">const</span> <span class="keywordtype">int</span> dbMaxSemValue = 1000000;00171 00172 00173 <span class="keyword">class </span>FASTDB_DLL_ENTRY dbSemaphore { 00174 <span class="keyword">protected</span>:00175 HANDLE s;00176 <span class="keyword">public</span>:00177 <span class="keywordtype">bool</span> wait(<span class="keywordtype">unsigned</span> msec = INFINITE) { 00178 <span class="keywordtype">int</span> rc = WaitForSingleObject(s, msec);00179 assert(rc == WAIT_OBJECT_0 || rc == WAIT_TIMEOUT);00180 <span class="keywordflow">return</span> rc == WAIT_OBJECT_0;00181 }00182 <span class="keywordtype">void</span> signal(<span class="keywordtype">unsigned</span> inc = 1) {00183 <span class="keywordflow">if</span> (inc != 0) { 00184 ReleaseSemaphore(s, inc, NULL);00185 }00186 }00187 <span class="keywordtype">void</span> reset() { 00188 <span class="keywordflow">while</span> (WaitForSingleObject(s, 0) == WAIT_OBJECT_0);00189 } 00190 <span class="keywordtype">bool</span> open(<span class="keywordtype">char</span> <span class="keyword">const</span>* name, <span class="keywordtype">unsigned</span> initValue = 0) {00191 s = CreateSemaphore(FASTDB_SECURITY_ATTRIBUTES, initValue, dbMaxSemValue, name);00192 <span class="keywordflow">return</span> s != NULL;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -