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

📄 sync__w32_8h-source.html

📁 FastDb是高效的内存数据库系统
💻 HTML
📖 第 1 页 / 共 2 页
字号:
00193     }00194     <span class="keywordtype">void</span> close() {00195         CloseHandle(s);00196     }00197     <span class="keywordtype">void</span> erase() { 00198         close();00199     }00200     dbSemaphore() { 00201         s = NULL;00202     }00203 };00204 00205 <span class="keyword">class </span>FASTDB_DLL_ENTRY dbEvent { 00206   <span class="keyword">protected</span>:00207     HANDLE e;00208   <span class="keyword">public</span>:00209     <span class="keywordtype">bool</span> wait(<span class="keywordtype">unsigned</span> msec = INFINITE) { 00210         <span class="keywordtype">int</span> rc = WaitForSingleObject(e, msec);00211         assert(rc == WAIT_OBJECT_0 || rc == WAIT_TIMEOUT);00212         <span class="keywordflow">return</span> rc == WAIT_OBJECT_0;00213     }00214     <span class="keywordtype">void</span> signal() {00215         SetEvent(e);00216     }00217     <span class="keywordtype">void</span> reset() {00218         ResetEvent(e);00219     }00220     <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>) {00221         e = CreateEvent(FASTDB_SECURITY_ATTRIBUTES, <span class="keyword">true</span>, signaled, name);00222         <span class="keywordflow">return</span> e != NULL; 00223     }00224     <span class="keywordtype">void</span> close() {00225         CloseHandle(e);00226     }00227     <span class="keywordtype">void</span> erase() { 00228         close();00229     }00230     dbEvent() { 00231         e = NULL;00232     }00233 };00234 00235 <span class="keyword">class </span>FASTDB_DLL_ENTRY dbLocalSemaphore : <span class="keyword">public</span> dbSemaphore { 00236   <span class="keyword">public</span>:00237     <span class="keywordtype">bool</span> wait(dbMutex&amp; mutex, time_t timeoutMsec) { 00238         mutex.unlock();00239         <span class="keywordtype">int</span> rc = WaitForSingleObject(s, timeoutMsec);00240         assert(rc == WAIT_OBJECT_0 || rc == WAIT_TIMEOUT);00241         mutex.lock();00242         <span class="keywordflow">return</span> rc == WAIT_OBJECT_0;00243     }00244     <span class="keywordtype">void</span> wait(dbMutex&amp; mutex) { 00245         mutex.unlock();00246         <span class="keywordtype">int</span> rc = WaitForSingleObject(s, INFINITE);00247         assert(rc == WAIT_OBJECT_0);00248         mutex.lock();00249     }00250     <span class="keywordtype">bool</span> open(<span class="keywordtype">unsigned</span> initValue = 0) {00251         <span class="keywordflow">return</span> dbSemaphore::open(NULL, initValue);00252     }00253 };00254 00255 <span class="keyword">class </span>FASTDB_DLL_ENTRY dbLocalEvent : <span class="keyword">public</span> dbEvent { 00256   <span class="keyword">public</span>:00257     <span class="keywordtype">bool</span> wait(dbMutex&amp; mutex, time_t timeoutMsec) { 00258         mutex.unlock();00259         <span class="keywordtype">int</span> rc = WaitForSingleObject(e, timeoutMsec);00260         assert(rc == WAIT_OBJECT_0 || rc == WAIT_TIMEOUT);00261         mutex.lock();00262         <span class="keywordflow">return</span> rc == WAIT_OBJECT_0;00263     }00264     <span class="keywordtype">void</span> wait(dbMutex&amp; mutex) { 00265         mutex.unlock();00266         <span class="keywordtype">int</span> rc = WaitForSingleObject(e, INFINITE);00267         assert(rc == WAIT_OBJECT_0);00268         mutex.lock();00269     }00270     <span class="keywordtype">bool</span> open(<span class="keywordtype">bool</span> signaled = <span class="keyword">false</span>) {00271          <span class="keywordflow">return</span> dbEvent::open(NULL, signaled);00272      }00273 };00274 00275 <span class="keyword">template</span>&lt;<span class="keyword">class</span> T&gt;00276 <span class="keyword">class </span>dbThreadContext { 00277     <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> index;00278   <span class="keyword">public</span>:00279     T* get() { 00280         <span class="keywordflow">return</span> (T*)TlsGetValue(index);00281     }00282     <span class="keywordtype">void</span> set(T* value) { 00283         TlsSetValue(index, value);00284     }00285     dbThreadContext() { 00286         index = TlsAlloc();00287         assert(index != TLS_OUT_OF_INDEXES);00288     }00289     ~dbThreadContext() { 00290         TlsFree(index);00291     }00292 };00293 00294 <span class="keyword">template</span>&lt;<span class="keyword">class</span> T&gt;00295 <span class="keyword">class </span>dbSharedObject { 00296     T*     ptr;00297     HANDLE h;00298   <span class="keyword">public</span>:00299 00300     <span class="keywordtype">bool</span> open(<span class="keywordtype">char</span>* name) { 00301 <span class="preprocessor">#ifdef NO_MMAP</span>00302 <span class="preprocessor"></span>        ptr = <span class="keyword">new</span> T();00303 <span class="preprocessor">#else</span>00304 <span class="preprocessor"></span>        h = CreateFileMapping(INVALID_HANDLE_VALUE,00305                               FASTDB_SECURITY_ATTRIBUTES, PAGE_READWRITE, 0, 00306                               <span class="keyword">sizeof</span>(T), name);00307         <span class="keywordflow">if</span> (h == NULL) { 00308             <span class="keywordflow">return</span> <span class="keyword">false</span>;00309         }00310         ptr = (T*)MapViewOfFile(h, FILE_MAP_ALL_ACCESS, 0, 0, 0);00311         <span class="keywordflow">if</span> (ptr == NULL) { 00312             CloseHandle(h);00313             <span class="keywordflow">return</span> <span class="keyword">false</span>;00314         }00315 <span class="preprocessor">#endif</span>00316 <span class="preprocessor"></span>        <span class="keywordflow">return</span> <span class="keyword">true</span>;00317     }00318 00319     T* get() { <span class="keywordflow">return</span> ptr; }00320 00321     <span class="keywordtype">void</span> close() { 00322 <span class="preprocessor">#ifdef NO_MMAP</span>00323 <span class="preprocessor"></span>        <span class="keyword">delete</span>[] ptr;00324 <span class="preprocessor">#else</span>00325 <span class="preprocessor"></span>        UnmapViewOfFile(ptr);00326         CloseHandle(h);00327 <span class="preprocessor">#endif</span>00328 <span class="preprocessor"></span>    }00329     <span class="keywordtype">void</span> erase() { 00330         close();00331     }00332     dbSharedObject() { 00333         ptr = NULL;00334         h = NULL;00335     }00336 };00337 00338 <span class="keyword">typedef</span> <span class="keywordtype">long</span> sharedsem_t;00339 00340 <span class="keyword">class </span>FASTDB_DLL_ENTRY dbGlobalCriticalSection { 00341     HANDLE       event;00342     sharedsem_t* count;00343 00344   <span class="keyword">public</span>:00345     <span class="keywordtype">void</span> enter() { 00346         <span class="keywordflow">if</span> (InterlockedDecrement(count) != 0) { 00347             <span class="comment">// another process is in critical section</span>00348             <span class="keywordtype">int</span> rc = WaitForSingleObject(event, INFINITE);00349             assert (rc == WAIT_OBJECT_0);00350         }00351     }00352 00353     <span class="keywordtype">void</span> leave() { 00354         <span class="keywordflow">if</span> (InterlockedIncrement(count) &lt;= 0) { 00355             <span class="comment">// some other processes try to enter critical section</span>00356             SetEvent(event);00357         }00358     }00359 00360     <span class="keywordtype">bool</span> open(<span class="keywordtype">char</span> <span class="keyword">const</span>* name, <span class="keywordtype">long</span>* count) { 00361         this-&gt;count = count;00362         event = OpenEvent(EVENT_ALL_ACCESS, FALSE, name);00363         <span class="keywordflow">return</span> event != NULL;00364     }00365     <span class="keywordtype">bool</span> create(<span class="keywordtype">char</span> <span class="keyword">const</span>* name, <span class="keywordtype">long</span>* count) { 00366         this-&gt;count = count;00367         *count = 1;00368         event = CreateEvent(FASTDB_SECURITY_ATTRIBUTES, <span class="keyword">false</span>, <span class="keyword">false</span>, name);00369         <span class="keywordflow">return</span> event != NULL;00370     }00371     <span class="keywordtype">void</span> close() { 00372         CloseHandle(event);00373     }00374     <span class="keywordtype">void</span> erase() { 00375         close();00376     }00377     dbGlobalCriticalSection() {00378         event = NULL;00379     }00380         00381 };00382         00383 <span class="preprocessor">#endif //__SYNC_W32_H__</span></pre></div><hr size="1"><address style="align: right;"><small>Generated on Thu Feb 12 13:04:48 2004 for FastDB by<a href="http://www.doxygen.org/index.html"><img src="doxygen.png" alt="doxygen" align="middle" border=0 > </a>1.3.5 </small></address></body></html>

⌨️ 快捷键说明

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