| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103 |
- /*
- * tryentercs.c
- *
- *
- * --------------------------------------------------------------------------
- *
- * Pthreads-win32 - POSIX Threads Library for Win32
- * Copyright(C) 1998 John E. Bossom
- * Copyright(C) 1999,2005 Pthreads-win32 contributors
- *
- * Contact Email: [email protected]
- *
- * 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.,
- * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, 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 (PT_STDCALL *)(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);
- }
|