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

📄 sync__w32_8h-source.html

📁 最新版本!fastdb是高效的内存数据库系统
💻 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_NAMESPACE
00451 
00452 <span class="preprocessor">#endif //__SYNC_W32_H__</span>
</pre></div><hr><address style="align: right;"><small>Generated on Thu Feb 14 12:42:30 2008 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 + -