⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 sync__w32_8h-source.html

📁 FastDb是高效的内存数据库系统
💻 HTML
📖 第 1 页 / 共 2 页
字号:
<!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&nbsp;Page</a> | <a class="qindex" href="hierarchy.html">Class&nbsp;Hierarchy</a> | <a class="qindex" href="annotated.html">Class&nbsp;List</a> | <a class="qindex" href="files.html">File&nbsp;List</a> | <a class="qindex" href="functions.html">Class&nbsp;Members</a></div><h1>sync_w32.h</h1><div class="fragment"><pre>00001 <span class="comment">//-&lt; SYNC_W32.H &gt;----------------------------------------------------*--------*</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(&amp;sd, SECURITY_DESCRIPTOR_REVISION);00023         SetSecurityDescriptorDacl(&amp;sd, TRUE, NULL, FALSE);00024         sa.nLength = <span class="keyword">sizeof</span>(sa);00025         sa.bInheritHandle = TRUE; 00026         sa.lpSecurityDescriptor = &amp;sd;00027     }00028     00029     <span class="keyword">static</span> dbNullSecurityDesciptor instance;00030 };00031 <span class="preprocessor">#define FASTDB_SECURITY_ATTRIBUTES &amp;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(&amp;cs);00042         initialized = <span class="keyword">true</span>;00043     }00044     ~dbMutex() {00045         DeleteCriticalSection(&amp;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(&amp;cs);00054         }00055     }00056     <span class="keywordtype">void</span> unlock() {00057         <span class="keywordflow">if</span> (initialized) { 00058             LeaveCriticalSection(&amp;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, &amp;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(&amp;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>&amp; 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 + -