📄 sync__w32_8h-source.html
字号:
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& 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& 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& 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& 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><<span class="keyword">class</span> T>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><<span class="keyword">class</span> T>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) <= 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->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->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 + -