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

📄 sync__w32_8h-source.html

📁 俄罗斯牛人KK的作品,著名的ORDBMS,这里上传最新的3.39版本源代码.希望了解对象关系数据库的同好,请不要错过.
💻 HTML
📖 第 1 页 / 共 2 页
字号:
00227     }00228     <span class="keywordtype">bool</span> open(<span class="keywordtype">char</span> <span class="keyword">const</span>* name, <span class="keywordtype">bool</span> signaled = <span class="keyword">false</span>) {00229         e = CreateEvent(FASTDB_SECURITY_ATTRIBUTES, <span class="keyword">true</span>, signaled, W32_STRING(name));00230         <span class="keywordflow">return</span> e != NULL; 00231     }00232     <span class="keywordtype">void</span> close() {00233         CloseHandle(e);00234     }00235     <span class="keywordtype">void</span> erase() { 00236         close();00237     }00238     dbEvent() { 00239         e = NULL;00240     }00241 };00242 00243 <span class="keyword">class </span>FASTDB_DLL_ENTRY dbLocalSemaphore : <span class="keyword">public</span> dbSemaphore { 00244   <span class="keyword">public</span>:00245     <span class="keywordtype">bool</span> wait(dbMutex&amp; mutex, time_t timeoutMsec) { 00246         mutex.unlock();00247         <span class="keywordtype">int</span> rc = WaitForSingleObject(s, (DWORD)timeoutMsec);00248         assert(rc == WAIT_OBJECT_0 || rc == WAIT_TIMEOUT);00249         mutex.lock();00250         <span class="keywordflow">return</span> rc == WAIT_OBJECT_0;00251     }00252     <span class="keywordtype">void</span> wait(dbMutex&amp; mutex) { 00253         mutex.unlock();00254         <span class="keywordtype">int</span> rc = WaitForSingleObject(s, INFINITE);00255         assert(rc == WAIT_OBJECT_0);00256         mutex.lock();00257     }00258     <span class="keywordtype">bool</span> open(<span class="keywordtype">unsigned</span> initValue = 0) {00259         <span class="keywordflow">return</span> dbSemaphore::open(NULL, initValue);00260     }00261 };00262 00263 <span class="keyword">class </span>FASTDB_DLL_ENTRY dbLocalEvent : <span class="keyword">public</span> dbEvent { 00264   <span class="keyword">public</span>:00265     <span class="keywordtype">bool</span> wait(dbMutex&amp; mutex, time_t timeoutMsec) { 00266         mutex.unlock();00267         <span class="keywordtype">int</span> rc = WaitForSingleObject(e, (DWORD)timeoutMsec);00268         assert(rc == WAIT_OBJECT_0 || rc == WAIT_TIMEOUT);00269         mutex.lock();00270         <span class="keywordflow">return</span> rc == WAIT_OBJECT_0;00271     }00272     <span class="keywordtype">void</span> wait(dbMutex&amp; mutex) { 00273         mutex.unlock();00274         <span class="keywordtype">int</span> rc = WaitForSingleObject(e, INFINITE);00275         assert(rc == WAIT_OBJECT_0);00276         mutex.lock();00277     }00278     <span class="keywordtype">bool</span> open(<span class="keywordtype">bool</span> signaled = <span class="keyword">false</span>) {00279          <span class="keywordflow">return</span> dbEvent::open(NULL, signaled);00280      }00281 };00282 00283 <span class="keyword">class </span>FASTDB_DLL_ENTRY dbWatchDog { 00284   <span class="keyword">public</span>:00285     <span class="keywordtype">bool</span> watch() { 00286         <span class="keywordflow">return</span> WaitForSingleObject(mutex, INFINITE) == ERROR_WAIT_NO_CHILDREN;00287     }00288     <span class="keywordtype">void</span> close() { 00289         CloseHandle(mutex);00290     }00291     <span class="keywordtype">bool</span> create(<span class="keywordtype">char</span> <span class="keyword">const</span>* name) {00292         mutex = CreateMutex(FASTDB_SECURITY_ATTRIBUTES, <span class="keyword">true</span>, W32_STRING(name));00293         <span class="keywordflow">return</span> mutex != NULL;00294     }00295     <span class="keywordtype">bool</span> open(<span class="keywordtype">char</span> <span class="keyword">const</span>* name) {00296 <span class="preprocessor">#if defined(_WINCE) || defined(UNICODE)</span>00297 <span class="preprocessor"></span>        <span class="keywordflow">return</span> create(name);00298 <span class="preprocessor">#else</span>00299 <span class="preprocessor"></span>        mutex = OpenMutex(MUTEX_ALL_ACCESS, <span class="keyword">false</span>, name);00300         <span class="keywordflow">return</span> mutex != NULL;00301 <span class="preprocessor">#endif</span>00302 <span class="preprocessor"></span>    }00303     HANDLE mutex;00304 };00305 00306 <span class="keyword">template</span>&lt;<span class="keyword">class</span> T&gt;00307 <span class="keyword">class </span>dbThreadContext { 00308     <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> index;00309   <span class="keyword">public</span>:00310     T* get() { 00311         <span class="keywordflow">return</span> (T*)TlsGetValue(index);00312     }00313     <span class="keywordtype">void</span> set(T* value) { 00314         TlsSetValue(index, value);00315     }00316     dbThreadContext() { 00317         index = TlsAlloc();00318         assert(index != TLS_OUT_OF_INDEXES);00319     }00320     ~dbThreadContext() { 00321         TlsFree(index);00322     }00323 };00324 00325 <span class="keyword">template</span>&lt;<span class="keyword">class</span> T&gt;00326 <span class="keyword">class </span>dbSharedObject { 00327     T*     ptr;00328     HANDLE h;00329   <span class="keyword">public</span>:00330 00331     <span class="keywordtype">bool</span> open(<span class="keywordtype">char</span>* name) { 00332 <span class="preprocessor">#ifdef NO_MMAP</span>00333 <span class="preprocessor"></span>        ptr = <span class="keyword">new</span> T();00334 <span class="preprocessor">#else</span>00335 <span class="preprocessor"></span>        h = CreateFileMapping(INVALID_HANDLE_VALUE,00336                               FASTDB_SECURITY_ATTRIBUTES, PAGE_READWRITE, 0, 00337                               <span class="keyword">sizeof</span>(T), W32_STRING(name));00338         <span class="keywordflow">if</span> (h == NULL) { 00339             <span class="keywordflow">return</span> <span class="keyword">false</span>;00340         }00341         ptr = (T*)MapViewOfFile(h, FILE_MAP_ALL_ACCESS, 0, 0, 0);00342         <span class="keywordflow">if</span> (ptr == NULL) { 00343             CloseHandle(h);00344             <span class="keywordflow">return</span> <span class="keyword">false</span>;00345         }00346 <span class="preprocessor">#endif</span>00347 <span class="preprocessor"></span>        <span class="keywordflow">return</span> <span class="keyword">true</span>;00348     }00349 00350     T* get() { <span class="keywordflow">return</span> ptr; }00351 00352     <span class="keywordtype">void</span> close() { 00353 <span class="preprocessor">#ifdef NO_MMAP</span>00354 <span class="preprocessor"></span>        <span class="keyword">delete</span>[] ptr;00355 <span class="preprocessor">#else</span>00356 <span class="preprocessor"></span>        UnmapViewOfFile(ptr);00357         CloseHandle(h);00358 <span class="preprocessor">#endif</span>00359 <span class="preprocessor"></span>    }00360     <span class="keywordtype">void</span> erase() { 00361         close();00362     }00363     dbSharedObject() { 00364         ptr = NULL;00365         h = NULL;00366     }00367 };00368 00369 <span class="keyword">typedef</span> <span class="keywordtype">long</span> sharedsem_t;00370 00371 <span class="preprocessor">#ifdef RECOVERABLE_CRITICAL_SECTION</span>00372 <span class="preprocessor"></span><span class="keyword">class </span>FASTDB_DLL_ENTRY dbGlobalCriticalSection { 00373     HANDLE mutex;00374   <span class="keyword">public</span>:00375     <span class="keywordtype">void</span> enter() { 00376         <span class="keywordtype">int</span> rc = WaitForSingleObject(mutex, INFINITE);00377         assert (rc == WAIT_OBJECT_0 || rc == WAIT_ABANDONED);00378     }00379 00380     <span class="keywordtype">void</span> leave() {00381         ReleaseMutex(mutex);00382     }00383 00384     <span class="keywordtype">bool</span> create(<span class="keywordtype">char</span> <span class="keyword">const</span>* name, <span class="keywordtype">long</span>* count) { 00385         mutex = CreateMutex(FASTDB_SECURITY_ATTRIBUTES, <span class="keyword">false</span>, W32_STRING(name));00386         <span class="keywordflow">return</span> mutex != NULL;00387     }00388 00389     <span class="keywordtype">bool</span> open(<span class="keywordtype">char</span> <span class="keyword">const</span>* name, <span class="keywordtype">long</span>* count) { 00390         mutex = OpenMutex(MUTEX_ALL_ACCESS, <span class="keyword">true</span>, W32_STRING(name));00391         <span class="keywordflow">return</span> mutex != NULL;00392     }00393 00394     <span class="keywordtype">void</span> close() { 00395         CloseHandle(mutex);00396     }00397     <span class="keywordtype">void</span> erase() { 00398         close();00399     }00400     dbGlobalCriticalSection() {00401         mutex = NULL;00402     }00403         00404 };00405 <span class="preprocessor">#else</span>00406 <span class="preprocessor"></span><span class="keyword">class </span>FASTDB_DLL_ENTRY dbGlobalCriticalSection { 00407     HANDLE       event;00408     sharedsem_t* count;00409 00410   <span class="keyword">public</span>:00411     <span class="keywordtype">void</span> enter() { 00412         <span class="keywordflow">if</span> (InterlockedDecrement(count) != 0) { 00413             <span class="comment">// another process is in critical section</span>00414             <span class="keywordtype">int</span> rc = WaitForSingleObject(event, INFINITE);00415             assert (rc == WAIT_OBJECT_0);00416         }00417     }00418 00419     <span class="keywordtype">void</span> leave() { 00420         <span class="keywordflow">if</span> (InterlockedIncrement(count) &lt;= 0) { 00421             <span class="comment">// some other processes try to enter critical section</span>00422             SetEvent(event);00423         }00424     }00425 00426     <span class="keywordtype">bool</span> open(<span class="keywordtype">char</span> <span class="keyword">const</span>* name, <span class="keywordtype">long</span>* count) { 00427         this-&gt;count = count;00428         event = OpenEvent(EVENT_ALL_ACCESS, FALSE, W32_STRING(name));00429         <span class="keywordflow">return</span> event != NULL;00430     }00431     <span class="keywordtype">bool</span> create(<span class="keywordtype">char</span> <span class="keyword">const</span>* name, <span class="keywordtype">long</span>* count) { 00432         this-&gt;count = count;00433         *count = 1;00434         event = CreateEvent(FASTDB_SECURITY_ATTRIBUTES, <span class="keyword">false</span>, <span class="keyword">false</span>, W32_STRING(name));00435         <span class="keywordflow">return</span> event != NULL;00436     }00437     <span class="keywordtype">void</span> close() { 00438         CloseHandle(event);00439     }00440     <span class="keywordtype">void</span> erase() { 00441         close();00442     }00443     dbGlobalCriticalSection() {00444         event = NULL;00445     }00446         00447 };00448 <span class="preprocessor">#endif</span>00449 <span class="preprocessor"></span>00450 END_FASTDB_NAMESPACE00451 00452 <span class="preprocessor">#endif //__SYNC_W32_H__</span></pre></div><hr><address style="align: right;"><small>Generated on Mon Oct 23 13:23:58 2006 for FastDB by<a href="http://www.doxygen.org/index.html"><img src="doxygen.png" alt="doxygen" align="middle" border=0 width=110 height=53></a>1.2.18 </small></address></body></html>

⌨️ 快捷键说明

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