README
上传用户:zhenyu
上传日期:2022-04-24
资源大小:268k
文件大小:22k
源码类别:

视频捕捉/采集

开发平台:

Visual C++

  1. PTHREADS-WIN32
  2. ==============
  3. Pthreads-win32 is free software, distributed under the GNU Lesser
  4. General Public License (LGPL). See the file 'COPYING.LIB' for terms
  5. and conditions. Also see the file 'COPYING' for information
  6. specific to pthreads-win32, copyrights and the LGPL.
  7. What is it?
  8. -----------
  9. Pthreads-win32 is an Open Source Software implementation of the
  10. Threads component of the POSIX 1003.1c 1995 Standard (or later)
  11. for Microsoft's Win32 environment. Some functions from POSIX
  12. 1003.1b are also supported including semaphores. Other related
  13. functions include the set of read-write lock functions. The
  14. library also supports some of the functionality of the Open
  15. Group's Single Unix specification, version 2, namely mutex types,
  16. plus some common and pthreads-win32 specific non-portable
  17. routines (see README.NONPORTABLE).
  18. See the file "ANNOUNCE" for more information including standards
  19. conformance details and the list of supported and unsupported
  20. routines.
  21. Prerequisites
  22. -------------
  23. MSVC or GNU C (MinGW32 MSys development kit)
  24. To build from source.
  25. QueueUserAPCEx by Panagiotis E. Hadjidoukas
  26. For true async cancelation of threads (including blocked threads).
  27. This is a DLL and Windows driver that provides pre-emptive APC
  28. by forcing threads into an alertable state when the APC is queued.
  29. Both the DLL and driver are provided with the pthreads-win32.exe
  30. self-unpacking ZIP, and on the pthreads-win32 FTP site  (in source
  31. and pre-built forms). Currently this is a separate LGPL package to
  32. pthreads-win32. See the README in the QueueUserAPCEx folder for
  33. installation instructions.
  34. Pthreads-win32 will automatically detect if the QueueUserAPCEx DLL
  35. QuserEx.DLL is available and whether the driver AlertDrv.sys is
  36. loaded. If it is not available, pthreads-win32 will simulate async
  37. cancelation, which means that it can async cancel only threads that
  38. are runnable. The simulated async cancellation cannot cancel blocked
  39. threads.
  40. Library naming
  41. --------------
  42. Because the library is being built using various exception
  43. handling schemes and compilers - and because the library
  44. may not work reliably if these are mixed in an application,
  45. each different version of the library has it's own name.
  46. Note 1: the incompatibility is really between EH implementations
  47. of the different compilers. It should be possible to use the
  48. standard C version from either compiler with C++ applications
  49. built with a different compiler. If you use an EH version of
  50. the library, then you must use the same compiler for the
  51. application. This is another complication and dependency that
  52. can be avoided by using only the standard C library version.
  53. Note 2: if you use a standard C pthread*.dll with a C++
  54. application, then any functions that you define that are
  55. intended to be called via pthread_cleanup_push() must be
  56. __cdecl.
  57. Note 3: the intention was to also name either the VC or GC
  58. version (it should be arbitrary) as pthread.dll, including
  59. pthread.lib and libpthread.a as appropriate. This is no longer
  60. likely to happen.
  61. Note 4: the compatibility number was added so that applications
  62. can differentiate between binary incompatible versions of the
  63. libs and dlls.
  64. In general:
  65. pthread[VG]{SE,CE,C}c.dll
  66. pthread[VG]{SE,CE,C}c.lib
  67. where:
  68. [VG] indicates the compiler
  69. V - MS VC, or
  70. G - GNU C
  71. {SE,CE,C} indicates the exception handling scheme
  72. SE - Structured EH, or
  73. CE - C++ EH, or
  74. C - no exceptions - uses setjmp/longjmp
  75. c - DLL compatibility number indicating ABI and API
  76.   compatibility with applications built against
  77.   any snapshot with the same compatibility number.
  78.   See 'Version numbering' below.
  79. The name may also be suffixed by a 'd' to indicate a debugging version
  80. of the library. E.g. pthreadVC2d.lib. Debugging versions contain
  81. additional information for debugging (symbols etc) and are often not
  82. optimised in any way (compiled with optimisation turned off).
  83. For example:
  84. pthreadVSE.dll (MSVC/SEH)
  85. pthreadGCE.dll (GNUC/C++ EH)
  86. pthreadGC.dll (GNUC/not dependent on exceptions)
  87. pthreadVC1.dll (MSVC/not dependent on exceptions - not binary
  88. compatible with pthreadVC.dll)
  89. pthreadVC2.dll (MSVC/not dependent on exceptions - not binary
  90. compatible with pthreadVC1.dll or pthreadVC.dll)
  91. The GNU library archive file names have correspondingly changed to:
  92. libpthreadGCEc.a
  93. libpthreadGCc.a
  94. Versioning numbering
  95. --------------------
  96. Version numbering is separate from the snapshot dating system, and
  97. is the canonical version identification system embedded within the
  98. DLL using the Microsoft version resource system. The versioning
  99. system chosen follows the GNU Libtool system. See
  100. http://www.gnu.org/software/libtool/manual.html section 6.2.
  101. See the resource file 'version.rc'.
  102. Microsoft version numbers use 4 integers:
  103. 0.0.0.0
  104. Pthreads-win32 uses the first 3 following the Libtool convention.
  105. The fourth is commonly used for the build number, but will be reserved
  106. for future use.
  107. current.revision.age.0
  108. The numbers are changed as follows:
  109. 1. If the library source code has changed at all since the last update,
  110.    then increment revision (`c:r:a' becomes `c:r+1:a').
  111. 2. If any interfaces have been added, removed, or changed since the last
  112.    update, increment current, and set revision to 0.
  113. 3. If any interfaces have been added since the last public release, then
  114.    increment age.
  115. 4. If any interfaces have been removed or changed since the last public
  116.    release, then set age to 0.
  117. DLL compatibility numbering is an attempt to ensure that applications
  118. always load a compatible pthreads-win32 DLL by using a DLL naming system
  119. that is consistent with the version numbering system. It also allows
  120. older and newer DLLs to coexist in the same filesystem so that older
  121. applications can continue to be used. For pre .NET Windows systems,
  122. this inevitably requires incompatible versions of the same DLLs to have
  123. different names.
  124. Pthreads-win32 has adopted the Cygwin convention of appending a single
  125. integer number to the DLL name. The number used is based on the library
  126. version number and is computed as 'current' - 'age'.
  127. (See http://home.att.net/~perlspinr/libversioning.html for a nicely
  128. detailed explanation.)
  129. Using this method, DLL name/s will only change when the DLL's
  130. backwards compatibility changes. Note that the addition of new
  131. 'interfaces' will not of itself change the DLL's compatibility for older
  132. applications.
  133. Which of the several dll versions to use?
  134. -----------------------------------------
  135. or,
  136. ---
  137. What are all these pthread*.dll and pthread*.lib files?
  138. -------------------------------------------------------
  139. Simple, use either pthreadGCv.* if you use GCC, or pthreadVCv.* if you
  140. use MSVC - where 'v' is the DLL versioning (compatibility) number.
  141. Otherwise, you need to choose carefully and know WHY.
  142. The most important choice you need to make is whether to use a
  143. version that uses exceptions internally, or not. There are versions
  144. of the library that use exceptions as part of the thread
  145. cancelation and exit implementation. The default version uses
  146. setjmp/longjmp.
  147. There is some contension amongst POSIX threads experts as
  148. to how POSIX threads cancelation and exit should work
  149. with languages that use exceptions, e.g. C++ and even C
  150. (Microsoft's Structured Exceptions).
  151. The issue is: should cancelation of a thread in, say,
  152. a C++ application cause object destructors and C++ exception
  153. handlers to be invoked as the stack unwinds during thread
  154. exit, or not?
  155. There seems to be more opinion in favour of using the
  156. standard C version of the library (no EH) with C++ applications
  157. for the reason that this appears to be the assumption commercial
  158. pthreads implementations make. Therefore, if you use an EH version
  159. of pthreads-win32 then you may be under the illusion that
  160. your application will be portable, when in fact it is likely to
  161. behave differently when linked with other pthreads libraries.
  162. Now you may be asking: then why have you kept the EH versions of
  163. the library?
  164. There are a couple of reasons:
  165. - there is division amongst the experts and so the code may
  166.   be needed in the future. Yes, it's in the repository and we
  167.   can get it out anytime in the future, but it would be difficult
  168.   to find.
  169. - pthreads-win32 is one of the few implementations, and possibly
  170.   the only freely available one, that has EH versions. It may be
  171.   useful to people who want to play with or study application
  172.   behaviour under these conditions.
  173. Notes:
  174. [If you use either pthreadVCE or pthreadGCE]
  175. 1. [See also the discussion in the FAQ file - Q2, Q4, and Q5]
  176. If your application contains catch(...) blocks in your POSIX
  177. threads then you will need to replace the "catch(...)" with the macro
  178. "PtW32Catch", eg.
  179. #ifdef PtW32Catch
  180. PtW32Catch {
  181. ...
  182. }
  183. #else
  184. catch(...) {
  185. ...
  186. }
  187. #endif
  188. Otherwise neither pthreads cancelation nor pthread_exit() will work
  189. reliably when using versions of the library that use C++ exceptions
  190. for cancelation and thread exit.
  191. This is due to what is believed to be a C++ compliance error in VC++
  192. whereby you may not have multiple handlers for the same exception in
  193. the same try/catch block. GNU G++ doesn't have this restriction.
  194. Other name changes
  195. ------------------
  196. All snapshots prior to and including snapshot 2000-08-13
  197. used "_pthread_" as the prefix to library internal
  198. functions, and "_PTHREAD_" to many library internal
  199. macros. These have now been changed to "ptw32_" and "PTW32_"
  200. respectively so as to not conflict with the ANSI standard's
  201. reservation of identifiers beginning with "_" and "__" for
  202. use by compiler implementations only.
  203. If you have written any applications and you are linking
  204. statically with the pthreads-win32 library then you may have
  205. included a call to _pthread_processInitialize. You will
  206. now have to change that to ptw32_processInitialize.
  207. Cleanup code default style
  208. --------------------------
  209. Previously, if not defined, the cleanup style was determined automatically
  210. from the compiler used, and one of the following was defined accordingly:
  211. __CLEANUP_SEH MSVC only
  212. __CLEANUP_CXX C++, including MSVC++, GNU G++
  213. __CLEANUP_C C, including GNU GCC, not MSVC
  214. These defines determine the style of cleanup (see pthread.h) and,
  215. most importantly, the way that cancelation and thread exit (via
  216. pthread_exit) is performed (see the routine ptw32_throw()).
  217. In short, the exceptions versions of the library throw an exception
  218. when a thread is canceled, or exits via pthread_exit(). This exception is
  219. caught by a handler in the thread startup routine, so that the
  220. the correct stack unwinding occurs regardless of where the thread
  221. is when it's canceled or exits via pthread_exit().
  222. In this snapshot, unless the build explicitly defines (e.g. via a
  223. compiler option) __CLEANUP_SEH, __CLEANUP_CXX, or __CLEANUP_C, then
  224. the build NOW always defaults to __CLEANUP_C style cleanup. This style
  225. uses setjmp/longjmp in the cancelation and pthread_exit implementations,
  226. and therefore won't do stack unwinding even when linked to applications
  227. that have it (e.g. C++ apps). This is for consistency with most/all
  228. commercial Unix POSIX threads implementations.
  229. Although it was not clearly documented before, it is still necessary to
  230. build your application using the same __CLEANUP_* define as was
  231. used for the version of the library that you link with, so that the
  232. correct parts of pthread.h are included. That is, the possible
  233. defines require the following library versions:
  234. __CLEANUP_SEH pthreadVSE.dll
  235. __CLEANUP_CXX pthreadVCE.dll or pthreadGCE.dll
  236. __CLEANUP_C pthreadVC.dll or pthreadGC.dll
  237. It is recommended that you let pthread.h use it's default __CLEANUP_C
  238. for both library and application builds. That is, don't define any of
  239. the above, and then link with pthreadVC.lib (MSVC or MSVC++) and
  240. libpthreadGC.a (MinGW GCC or G++). The reason is explained below, but
  241. another reason is that the prebuilt pthreadVCE.dll is currently broken.
  242. Versions built with MSVC++ later than version 6 may not be broken, but I
  243. can't verify this yet.
  244. WHY ARE WE MAKING THE DEFAULT STYLE LESS EXCEPTION-FRIENDLY?
  245. Because no commercial Unix POSIX threads implementation allows you to
  246. choose to have stack unwinding. Therefore, providing it in pthread-win32
  247. as a default is dangerous. We still provide the choice but unless
  248. you consciously choose to do otherwise, your pthreads applications will
  249. now run or crash in similar ways irrespective of the pthreads platform
  250. you use. Or at least this is the hope.
  251. Building under VC++ using C++ EH, Structured EH, or just C
  252. ----------------------------------------------------------
  253. From the source directory run nmake without any arguments to list
  254. help information. E.g.
  255. $ nmake
  256. Microsoft (R) Program Maintenance Utility   Version 6.00.8168.0
  257. Copyright (C) Microsoft Corp 1988-1998. All rights reserved.
  258. Run one of the following command lines:
  259. nmake clean VCE (to build the MSVC dll with C++ exception handling)
  260. nmake clean VSE (to build the MSVC dll with structured exception handling)
  261. nmake clean VC (to build the MSVC dll with C cleanup code)
  262. nmake clean VCE-inlined (to build the MSVC inlined dll with C++ exception handling)
  263. nmake clean VSE-inlined (to build the MSVC inlined dll with structured exception handling)
  264. nmake clean VC-inlined (to build the MSVC inlined dll with C cleanup code)
  265. nmake clean VC-static (to build the MSVC static lib with C cleanup code)
  266. nmake clean VCE-debug (to build the debug MSVC dll with C++ exception handling)
  267. nmake clean VSE-debug (to build the debug MSVC dll with structured exception handling)
  268. nmake clean VC-debug (to build the debug MSVC dll with C cleanup code)
  269. nmake clean VCE-inlined-debug (to build the debug MSVC inlined dll with C++ exception handling)
  270. nmake clean VSE-inlined-debug (to build the debug MSVC inlined dll with structured exception handling)
  271. nmake clean VC-inlined-debug (to build the debug MSVC inlined dll with C cleanup code)
  272. nmake clean VC-static-debug (to build the debug MSVC static lib with C cleanup code)
  273. The pre-built dlls are normally built using the *-inlined targets.
  274. You can run the testsuite by changing to the "tests" directory and
  275. running nmake. E.g.:
  276. $ cd tests
  277. $ nmake
  278. Microsoft (R) Program Maintenance Utility   Version 6.00.8168.0
  279. Copyright (C) Microsoft Corp 1988-1998. All rights reserved.
  280. Run one of the following command lines:
  281. nmake clean VC (to test using VC dll with VC (no EH) applications)
  282. nmake clean VCX (to test using VC dll with VC++ (EH) applications)
  283. nmake clean VCE (to test using the VCE dll with VC++ EH applications)
  284. nmake clean VSE (to test using VSE dll with VC (SEH) applications)
  285. nmake clean VC-bench (to benchtest using VC dll with C bench app)
  286. nmake clean VCX-bench (to benchtest using VC dll with C++ bench app)
  287. nmake clean VCE-bench (to benchtest using VCE dll with C++ bench app)
  288. nmake clean VSE-bench (to benchtest using VSE dll with SEH bench app)
  289. nmake clean VC-static (to test using VC static lib with VC (no EH) applications)
  290. Building under Mingw32
  291. ----------------------
  292. The dll can be built easily with recent versions of Mingw32.
  293. (The distributed versions are built using Mingw32 and MsysDTK
  294. from www.mingw32.org.)
  295. From the source directory, run make for help information. E.g.:
  296. $ make
  297. Run one of the following command lines:
  298. make clean GC            (to build the GNU C dll with C cleanup code)
  299. make clean GCE           (to build the GNU C dll with C++ exception handling)
  300. make clean GC-inlined    (to build the GNU C inlined dll with C cleanup code)
  301. make clean GCE-inlined   (to build the GNU C inlined dll with C++ exception handling)
  302. make clean GC-static     (to build the GNU C inlined static lib with C cleanup code)
  303. make clean GC-debug      (to build the GNU C debug dll with C cleanup code)
  304. make clean GCE-debug     (to build the GNU C debug dll with C++ exception handling)
  305. make clean GC-inlined-debug    (to build the GNU C inlined debug dll with C cleanup code)
  306. make clean GCE-inlined-debug   (to build the GNU C inlined debug dll with C++ exception handling)
  307. make clean GC-static-debug     (to build the GNU C inlined static debug lib with C cleanup code)
  308. The pre-built dlls are normally built using the *-inlined targets.
  309. You can run the testsuite by changing to the "tests" directory and
  310. running make for help information. E.g.:
  311. $ cd tests
  312. $ make
  313. Run one of the following command lines:
  314. make clean GC    (to test using GC dll with C (no EH) applications)
  315. make clean GCX   (to test using GC dll with C++ (EH) applications)
  316. make clean GCE   (to test using GCE dll with C++ (EH) applications)
  317. make clean GC-bench       (to benchtest using GNU C dll with C cleanup code)
  318. make clean GCE-bench   (to benchtest using GNU C dll with C++ exception handling)
  319. make clean GC-static   (to test using GC static lib with C (no EH) applications)
  320. Building under Linux using the Mingw32 cross development tools
  321. --------------------------------------------------------------
  322. You can build the library without leaving Linux by using the Mingw32 cross
  323. development toolchain. See http://www.libsdl.org/extras/win32/cross/ for
  324. tools and info. The GNUmakefile contains some support for this, for example:
  325. make CROSS=i386-mingw32msvc- clean GC-inlined
  326. will build pthreadGCn.dll and libpthreadGCn.a (n=version#), provided your
  327. cross-tools/bin directory is in your PATH (or use the cross-make.sh script
  328. at the URL above).
  329. Building the library as a statically linkable library
  330. -----------------------------------------------------
  331. General: PTW32_STATIC_LIB must be defined for both the library build and the
  332. application build. The makefiles supplied and used by the following 'make'
  333. command lines will define this for you.
  334. MSVC (creates pthreadVCn.lib as a static link lib):
  335. nmake clean VC-static
  336. MinGW32 (creates libpthreadGCn.a as a static link lib):
  337. make clean GC-static
  338. Define PTW32_STATIC_LIB when building your application. Also, your
  339. application must call a two non-portable routines to initialise the
  340. some state on startup and cleanup before exit. One other routine needs
  341. to be called to cleanup after any Win32 threads have called POSIX API
  342. routines. See README.NONPORTABLE or the html reference manual pages for
  343. details on these routines:
  344. BOOL pthread_win32_process_attach_np (void);
  345. BOOL pthread_win32_process_detach_np (void);
  346. BOOL pthread_win32_thread_attach_np (void); // Currently a no-op
  347. BOOL pthread_win32_thread_detach_np (void);
  348. The tests makefiles have the same targets but only check that the
  349. static library is statically linkable. They don't run the full
  350. testsuite. To run the full testsuite, build the dlls and run the
  351. dll test targets.
  352. Building the library under Cygwin
  353. ---------------------------------
  354. Cygwin is implementing it's own POSIX threads routines and these
  355. will be the ones to use if you develop using Cygwin.
  356. Ready to run binaries
  357. ---------------------
  358. For convenience, the following ready-to-run files can be downloaded
  359. from the FTP site (see under "Availability" below):
  360. pthread.h
  361. semaphore.h
  362. sched.h
  363. pthreadVC.dll - built with MSVC compiler using C setjmp/longjmp
  364. pthreadVC.lib
  365. pthreadVCE.dll - built with MSVC++ compiler using C++ EH
  366. pthreadVCE.lib
  367. pthreadVSE.dll - built with MSVC compiler using SEH
  368. pthreadVSE.lib
  369. pthreadGC.dll - built with Mingw32 GCC
  370. libpthreadGC.a - derived from pthreadGC.dll
  371. pthreadGCE.dll - built with Mingw32 G++
  372. libpthreadGCE.a - derived from pthreadGCE.dll
  373. As of August 2003 pthreads-win32 pthreadG* versions are built and tested
  374. using the MinGW + MsysDTK environment current as of that date or later.
  375. The following file MAY be needed for older MinGW environments.
  376. gcc.dll  - needed to build and run applications that use
  377.   pthreadGCE.dll.
  378. Building applications with GNU compilers
  379. ----------------------------------------
  380. If you're using pthreadGC.dll:
  381. With the three header files, pthreadGC.dll and libpthreadGC.a in the
  382. same directory as your application myapp.c, you could compile, link
  383. and run myapp.c under Mingw32 as follows:
  384. gcc -o myapp.exe myapp.c -I. -L. -lpthreadGC
  385. myapp
  386. Or put pthreadGC.dll in an appropriate directory in your PATH,
  387. put libpthreadGC.a in your system lib directory, and
  388. put the three header files in your system include directory,
  389. then use:
  390. gcc -o myapp.exe myapp.c -lpthreadGC
  391. myapp
  392. If you're using pthreadGCE.dll:
  393. With the three header files, pthreadGCE.dll, gcc.dll and libpthreadGCE.a
  394. in the same directory as your application myapp.c, you could compile,
  395. link and run myapp.c under Mingw32 as follows:
  396. gcc -x c++ -o myapp.exe myapp.c -I. -L. -lpthreadGCE
  397. myapp
  398. Or put pthreadGCE.dll and gcc.dll in an appropriate directory in
  399. your PATH, put libpthreadGCE.a in your system lib directory, and
  400. put the three header files in your system include directory,
  401. then use:
  402. gcc -x c++ -o myapp.exe myapp.c -lpthreadGCE
  403. myapp
  404. Availability
  405. ------------
  406. The complete source code in either unbundled, self-extracting
  407. Zip file, or tar/gzipped format can be found at:
  408. ftp://sources.redhat.com/pub/pthreads-win32
  409. The pre-built DLL, export libraries and matching pthread.h can
  410. be found at:
  411. ftp://sources.redhat.com/pub/pthreads-win32/dll-latest
  412. Home page:
  413. http://sources.redhat.com/pthreads-win32/
  414. Mailing list
  415. ------------
  416. There is a mailing list for discussing pthreads on Win32.
  417. To join, send email to:
  418. pthreads-win32-subscribe@sources.redhat.com
  419. Unsubscribe by sending mail to:
  420. pthreads-win32-unsubscribe@sources.redhat.com
  421. Acknowledgements
  422. ----------------
  423. See the ANNOUNCE file for acknowledgements.
  424. See the 'CONTRIBUTORS' file for the list of contributors.
  425. As much as possible, the ChangeLog file attributes
  426. contributions and patches that have been incorporated
  427. in the library to the individuals responsible.
  428. Finally, thanks to all those who work on and contribute to the
  429. POSIX and Single Unix Specification standards. The maturity of an
  430. industry can be measured by it's open standards.
  431. ----
  432. Ross Johnson
  433. <rpj@callisto.canberra.edu.au>