|  | /* | 
|  | * tryentercs.c | 
|  | * | 
|  | * | 
|  | * -------------------------------------------------------------------------- | 
|  | * | 
|  | *      Pthreads-win32 - POSIX Threads Library for Win32 | 
|  | *      Copyright(C) 1998 John E. Bossom | 
|  | *      Copyright(C) 1999,2005 Pthreads-win32 contributors | 
|  | * | 
|  | *      Contact Email: rpj@callisto.canberra.edu.au | 
|  | * | 
|  | *      The current list of contributors is contained | 
|  | *      in the file CONTRIBUTORS included with the source | 
|  | *      code distribution. The list can also be seen at the | 
|  | *      following World Wide Web location: | 
|  | *      http://sources.redhat.com/pthreads-win32/contributors.html | 
|  | * | 
|  | *      This library is free software; you can redistribute it and/or | 
|  | *      modify it under the terms of the GNU Lesser General Public | 
|  | *      License as published by the Free Software Foundation; either | 
|  | *      version 2 of the License, or (at your option) any later version. | 
|  | * | 
|  | *      This library is distributed in the hope that it will be useful, | 
|  | *      but WITHOUT ANY WARRANTY; without even the implied warranty of | 
|  | *      MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU | 
|  | *      Lesser General Public License for more details. | 
|  | * | 
|  | *      You should have received a copy of the GNU Lesser General Public | 
|  | *      License along with this library in the file COPYING.LIB; | 
|  | *      if not, write to the Free Software Foundation, Inc., | 
|  | *      59 Temple Place - Suite 330, Boston, MA 02111-1307, USA | 
|  | * | 
|  | * -------------------------------------------------------------------------- | 
|  | * | 
|  | * See if we have the TryEnterCriticalSection function. | 
|  | * Does not use any part of pthreads. | 
|  | */ | 
|  |  | 
|  | #include <windows.h> | 
|  | #include <process.h> | 
|  | #include <stdio.h> | 
|  |  | 
|  | /* | 
|  | * Function pointer to TryEnterCriticalSection if it exists | 
|  | * - otherwise NULL | 
|  | */ | 
|  | BOOL (WINAPI *_try_enter_critical_section)(LPCRITICAL_SECTION) = | 
|  | NULL; | 
|  |  | 
|  | /* | 
|  | * Handle to kernel32.dll | 
|  | */ | 
|  | static HINSTANCE _h_kernel32; | 
|  |  | 
|  |  | 
|  | int | 
|  | main() | 
|  | { | 
|  | CRITICAL_SECTION cs; | 
|  |  | 
|  | SetLastError(0); | 
|  |  | 
|  | printf("Last Error [main enter] %ld\n", (long) GetLastError()); | 
|  |  | 
|  | /* | 
|  | * Load KERNEL32 and try to get address of TryEnterCriticalSection | 
|  | */ | 
|  | _h_kernel32 = LoadLibrary(TEXT("KERNEL32.DLL")); | 
|  | _try_enter_critical_section = | 
|  | (BOOL (WINAPI *)(LPCRITICAL_SECTION)) | 
|  | GetProcAddress(_h_kernel32, | 
|  | (LPCSTR) "TryEnterCriticalSection"); | 
|  |  | 
|  | if (_try_enter_critical_section != NULL) | 
|  | { | 
|  | InitializeCriticalSection(&cs); | 
|  |  | 
|  | SetLastError(0); | 
|  |  | 
|  | if ((*_try_enter_critical_section)(&cs) != 0) | 
|  | { | 
|  | LeaveCriticalSection(&cs); | 
|  | } | 
|  | else | 
|  | { | 
|  | printf("Last Error [try enter] %ld\n", (long) GetLastError()); | 
|  |  | 
|  | _try_enter_critical_section = NULL; | 
|  | } | 
|  | DeleteCriticalSection(&cs); | 
|  | } | 
|  |  | 
|  | (void) FreeLibrary(_h_kernel32); | 
|  |  | 
|  | printf("This system %s TryEnterCriticalSection.\n", | 
|  | (_try_enter_critical_section == NULL) ? "DOES NOT SUPPORT" : "SUPPORTS"); | 
|  | printf("POSIX Mutexes will be based on Win32 %s.\n", | 
|  | (_try_enter_critical_section == NULL) ? "Mutexes" : "Critical Sections"); | 
|  |  | 
|  | return(0); | 
|  | } | 
|  |  |