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

📄 sync__w32_8h-source.html

📁 俄罗斯牛人KK的作品,著名的ORDBMS,这里上传最新的3.39版本源代码.希望了解对象关系数据库的同好,请不要错过.
💻 HTML
📖 第 1 页 / 共 2 页
字号:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"><html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1"><title>sync_w32.h Source File</title><link href="doxygen.css" rel="stylesheet" type="text/css"></head><body><!-- Generated by Doxygen 1.2.18 --><center><a class="qindex" href="index.html">Main Page</a> &nbsp; <a class="qindex" href="hierarchy.html">Class Hierarchy</a> &nbsp; <a class="qindex" href="annotated.html">Compound List</a> &nbsp; <a class="qindex" href="files.html">File List</a> &nbsp; <a class="qindex" href="functions.html">Compound Members</a> &nbsp; </center><hr><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 BEGIN_FASTDB_NAMESPACE00015 00016 <span class="preprocessor">#ifdef SET_NULL_DACL</span>00017 <span class="preprocessor"></span><span class="keyword">class </span>FASTDB_DLL_ENTRY dbNullSecurityDesciptor { 00018   <span class="keyword">public</span>:00019     SECURITY_DESCRIPTOR sd;00020     SECURITY_ATTRIBUTES sa; 00021 00022     dbNullSecurityDesciptor() { 00023         InitializeSecurityDescriptor(&amp;sd, SECURITY_DESCRIPTOR_REVISION);00024         SetSecurityDescriptorDacl(&amp;sd, TRUE, NULL, FALSE);00025         sa.nLength = <span class="keyword">sizeof</span>(sa);00026         sa.bInheritHandle = TRUE; 00027         sa.lpSecurityDescriptor = &amp;sd;00028     }00029     00030     <span class="keyword">static</span> dbNullSecurityDesciptor instance;00031 };00032 <span class="preprocessor">#define FASTDB_SECURITY_ATTRIBUTES &amp;dbNullSecurityDesciptor::instance.sa</span>00033 <span class="preprocessor"></span><span class="preprocessor">#else    </span>00034 <span class="preprocessor"></span><span class="preprocessor">#define FASTDB_SECURITY_ATTRIBUTES NULL</span>00035 <span class="preprocessor"></span><span class="preprocessor">#endif</span>00036 <span class="preprocessor"></span>00037 <span class="keyword">class </span>FASTDB_DLL_ENTRY dbMutex { 00038     CRITICAL_SECTION cs;00039     <span class="keywordtype">bool</span>             initialized;00040   <span class="keyword">public</span>:00041     dbMutex() {00042         InitializeCriticalSection(&amp;cs);00043         initialized = <span class="keyword">true</span>;00044     }00045     ~dbMutex() {00046         DeleteCriticalSection(&amp;cs);00047         initialized = <span class="keyword">false</span>;00048     }00049     <span class="keywordtype">bool</span> isInitialized() { 00050         <span class="keywordflow">return</span> initialized;00051     }00052     <span class="keywordtype">void</span> lock() {00053         <span class="keywordflow">if</span> (initialized) { 00054             EnterCriticalSection(&amp;cs);00055         }00056     }00057     <span class="keywordtype">void</span> unlock() {00058         <span class="keywordflow">if</span> (initialized) { 00059             LeaveCriticalSection(&amp;cs);00060         }00061     }00062 };00063 00064 <span class="preprocessor">#define thread_proc WINAPI</span>00065 <span class="preprocessor"></span>00066 <span class="keyword">class </span>FASTDB_DLL_ENTRY dbThread { 00067     HANDLE h;00068   <span class="keyword">public</span>:00069     <span class="keyword">typedef</span> void (thread_proc* thread_proc_t)(<span class="keywordtype">void</span>*);00070 00071     <span class="keyword">static</span> <span class="keywordtype">void</span> sleep(time_t sec) { 00072         Sleep(sec*1000);00073     }00074 00075 00076     <span class="keywordtype">void</span> create(thread_proc_t f, <span class="keywordtype">void</span>* arg) { 00077         DWORD threadid;00078         h = CreateThread(FASTDB_SECURITY_ATTRIBUTES, 0, LPTHREAD_START_ROUTINE(f), arg,00079                          0, &amp;threadid);00080     }00081     <span class="keyword">enum</span> ThreadPriority { 00082         THR_PRI_LOW, 00083         THR_PRI_HIGH00084     };00085 00086     <span class="keywordtype">void</span> setPriority(ThreadPriority pri) { 00087         SetThreadPriority(h, pri == THR_PRI_LOW ? THREAD_PRIORITY_IDLE : THREAD_PRIORITY_HIGHEST);00088     }00089         00090     <span class="keywordtype">void</span> join() { 00091         WaitForSingleObject(h, INFINITE);00092         CloseHandle(h);00093         h = NULL;00094     }00095     <span class="keywordtype">void</span> detach() { 00096         <span class="keywordflow">if</span> (h != NULL) { 00097             CloseHandle(h);00098             h = NULL;00099         }00100     }   00101     dbThread() { 00102         h = NULL; 00103     }00104     ~dbThread() { 00105         <span class="keywordflow">if</span> (h != NULL) { 00106             CloseHandle(h);00107         }00108     }00109     <span class="keyword">static</span> <span class="keywordtype">int</span> numberOfProcessors() { 00110 <span class="preprocessor">#ifdef PHAR_LAP</span>00111 <span class="preprocessor"></span>        <span class="keywordflow">return</span> 1;00112 <span class="preprocessor">#else</span>00113 <span class="preprocessor"></span>        SYSTEM_INFO sysinfo;00114         GetSystemInfo(&amp;sysinfo);00115         <span class="keywordflow">return</span> sysinfo.dwNumberOfProcessors;00116 <span class="preprocessor">#endif</span>00117 <span class="preprocessor"></span>    }00118 };00119     00120 <span class="keyword">class </span>FASTDB_DLL_ENTRY dbProcessId { 00121     DWORD tid;00122   <span class="keyword">public</span>:00123     <span class="keywordtype">bool</span> operator != (dbProcessId <span class="keyword">const</span>&amp; other)<span class="keyword"> const </span>{ 00124         <span class="keywordflow">return</span> tid != other.tid;00125     }00126 00127     <span class="keywordtype">void</span> clear() { 00128         tid = 0;00129     }00130 00131     <span class="keyword">static</span> dbProcessId getCurrent() {00132         dbProcessId curr;00133         curr.tid = GetCurrentThreadId();00134         <span class="keywordflow">return</span> curr;00135     }00136 };00137 00138 00139 00140 <span class="keyword">class </span>FASTDB_DLL_ENTRY dbInitializationMutex { 00141     HANDLE m;00142   <span class="keyword">public</span>: 00143     <span class="keyword">enum</span> initializationStatus { 00144         InitializationError, 00145         AlreadyInitialized,00146         NotYetInitialized00147     };00148     initializationStatus initialize(<span class="keywordtype">char</span> <span class="keyword">const</span>* name) { 00149         initializationStatus status;00150         m = CreateMutex(FASTDB_SECURITY_ATTRIBUTES, <span class="keyword">true</span>, W32_STRING(name));00151         <span class="keywordflow">if</span> (GetLastError() == ERROR_ALREADY_EXISTS) { 00152             status = WaitForSingleObject(m, INFINITE) == WAIT_OBJECT_0 00153                    ? AlreadyInitialized : InitializationError;00154             ReleaseMutex(m);00155         } <span class="keywordflow">else</span> <span class="keywordflow">if</span> (m != NULL) { 00156             status = NotYetInitialized;00157         } <span class="keywordflow">else</span> { 00158             status = InitializationError;00159         }00160         <span class="keywordflow">return</span> status;00161     }00162     <span class="keywordtype">void</span> done() { 00163         ReleaseMutex(m);00164     }00165     <span class="keywordtype">bool</span> close() {00166         CloseHandle(m);00167         <span class="keywordflow">return</span> <span class="keyword">false</span>;00168     }00169     <span class="keywordtype">void</span> erase() { 00170         close();00171     }00172     dbInitializationMutex() { 00173         m = NULL;00174     }00175 };00176 00177 00178 <span class="keyword">const</span> <span class="keywordtype">int</span> dbMaxSemValue = 1000000;00179 00180 00181 <span class="keyword">class </span>FASTDB_DLL_ENTRY dbSemaphore { 00182   <span class="keyword">protected</span>:00183     HANDLE s;00184   <span class="keyword">public</span>:00185     <span class="keywordtype">bool</span> wait(<span class="keywordtype">unsigned</span> msec = INFINITE) { 00186         <span class="keywordtype">int</span> rc = WaitForSingleObject(s, msec);00187         assert(rc == WAIT_OBJECT_0 || rc == WAIT_TIMEOUT);00188         <span class="keywordflow">return</span> rc == WAIT_OBJECT_0;00189     }00190     <span class="keywordtype">void</span> signal(<span class="keywordtype">unsigned</span> inc = 1) {00191         <span class="keywordflow">if</span> (inc != 0) { 00192             ReleaseSemaphore(s, inc, NULL);00193         }00194     }00195     <span class="keywordtype">void</span> reset() { 00196         <span class="keywordflow">while</span> (WaitForSingleObject(s, 0) == WAIT_OBJECT_0);00197     }    00198     <span class="keywordtype">bool</span> open(<span class="keywordtype">char</span> <span class="keyword">const</span>* name, <span class="keywordtype">unsigned</span> initValue = 0) {00199         s = CreateSemaphore(FASTDB_SECURITY_ATTRIBUTES, initValue, dbMaxSemValue, W32_STRING(name));00200         <span class="keywordflow">return</span> s != NULL; 00201     }00202     <span class="keywordtype">void</span> close() {00203         CloseHandle(s);00204     }00205     <span class="keywordtype">void</span> erase() { 00206         close();00207     }00208     dbSemaphore() { 00209         s = NULL;00210     }00211 };00212 00213 <span class="keyword">class </span>FASTDB_DLL_ENTRY dbEvent { 00214   <span class="keyword">protected</span>:00215     HANDLE e;00216   <span class="keyword">public</span>:00217     <span class="keywordtype">bool</span> wait(<span class="keywordtype">unsigned</span> msec = INFINITE) { 00218         <span class="keywordtype">int</span> rc = WaitForSingleObject(e, msec);00219         assert(rc == WAIT_OBJECT_0 || rc == WAIT_TIMEOUT);00220         <span class="keywordflow">return</span> rc == WAIT_OBJECT_0;00221     }00222     <span class="keywordtype">void</span> signal() {00223         SetEvent(e);00224     }00225     <span class="keywordtype">void</span> reset() {00226         ResetEvent(e);

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -