1<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> 2<html> 3<head> 4<meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> 5<title>Using and building the library</title> 6<link rel="stylesheet" href="../../../doc/src/boostbook.css" type="text/css"> 7<meta name="generator" content="DocBook XSL Stylesheets V1.79.1"> 8<link rel="home" href="../index.html" title="The Boost C++ Libraries BoostBook Documentation Subset"> 9<link rel="up" href="../thread.html" title="Chapter 39. Thread 4.8.0"> 10<link rel="prev" href="../thread.html" title="Chapter 39. Thread 4.8.0"> 11<link rel="next" href="changes.html" title="History"> 12</head> 13<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"> 14<table cellpadding="2" width="100%"><tr> 15<td valign="top"><img alt="Boost C++ Libraries" width="277" height="86" src="../../../boost.png"></td> 16<td align="center"><a href="../../../index.html">Home</a></td> 17<td align="center"><a href="../../../libs/libraries.htm">Libraries</a></td> 18<td align="center"><a href="http://www.boost.org/users/people.html">People</a></td> 19<td align="center"><a href="http://www.boost.org/users/faq.html">FAQ</a></td> 20<td align="center"><a href="../../../more/index.htm">More</a></td> 21</tr></table> 22<hr> 23<div class="spirit-nav"> 24<a accesskey="p" href="../thread.html"><img src="../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../thread.html"><img src="../../../doc/src/images/up.png" alt="Up"></a><a accesskey="h" href="../index.html"><img src="../../../doc/src/images/home.png" alt="Home"></a><a accesskey="n" href="changes.html"><img src="../../../doc/src/images/next.png" alt="Next"></a> 25</div> 26<div class="section"> 27<div class="titlepage"><div><div><h2 class="title" style="clear: both"> 28<a name="thread.build"></a><a class="link" href="build.html" title="Using and building the library">Using and building the library</a> 29</h2></div></div></div> 30<div class="toc"><dl class="toc"> 31<dt><span class="section"><a href="build.html#thread.build.configuration">Configuration</a></span></dt> 32<dt><span class="section"><a href="build.html#thread.build.limitations">Limitations</a></span></dt> 33</dl></div> 34<p> 35 Boost.Thread is configured following the conventions used to build <a href="http://www.boost.org/doc/libs/1_48_0/libs/config/doc/html/boost_config/boost_macro_reference.html#boost_config.boost_macro_reference.macros_for_libraries_with_separate_source_code" target="_top">libraries 36 with separate source code</a>. Boost.Thread will import/export the code 37 only if the user has specifically asked for it, by defining either BOOST_ALL_DYN_LINK 38 if they want all boost libraries to be dynamically linked, or BOOST_THREAD_DYN_LINK 39 if they want just this one to be dynamically liked. 40 </p> 41<p> 42 The definition of these macros determines whether BOOST_THREAD_USE_DLL is defined. 43 If BOOST_THREAD_USE_DLL is not defined, the library will define BOOST_THREAD_USE_DLL 44 or BOOST_THREAD_USE_LIB depending on whether the platform. On non windows platforms 45 BOOST_THREAD_USE_LIB is defined if is not defined. In windows platforms, BOOST_THREAD_USE_LIB 46 is defined if BOOST_THREAD_USE_DLL and the compiler supports auto-tss cleanup 47 with Boost.Threads (for the time been Msvc and Intel) 48 </p> 49<p> 50 The source code compiled when building the library defines a macros BOOST_THREAD_SOURCE 51 that is used to import or export it. The user must not define this macro in 52 any case. 53 </p> 54<p> 55 Boost.Thread depends on some non header-only libraries. 56 </p> 57<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "> 58<li class="listitem"> 59 Boost.System: This dependency is mandatory and you will need to link with 60 the library. 61 </li> 62<li class="listitem"> 63 Boost.Chrono: This dependency is optional (see below how to configure) 64 and you will need to link with the library if you use some of the time 65 related interfaces. 66 </li> 67<li class="listitem"> 68 Boost.DateTime: This dependency is mandatory, but even if Boost.DateTime 69 is a non header-only library Boost.Thread uses only parts that are header-only, 70 so in principle you should not need to link with the library. 71 </li> 72</ul></div> 73<p> 74 It seems that there are some IDE (as e.g. Visual Studio) that deduce the libraries 75 that a program needs to link to inspecting the sources. Such IDE could force 76 to link to Boost.DateTime and/or Boost.Chrono. 77 </p> 78<p> 79 As the single mandatory dependency is to Boost.System, the following 80 </p> 81<pre class="programlisting"><span class="identifier">bjam</span> <span class="identifier">toolset</span><span class="special">=</span><span class="identifier">msvc</span><span class="special">-</span><span class="number">11.0</span> <span class="special">--</span><span class="identifier">build</span><span class="special">-</span><span class="identifier">type</span><span class="special">=</span><span class="identifier">complete</span> <span class="special">--</span><span class="identifier">with</span><span class="special">-</span><span class="identifier">thread</span> 82</pre> 83<p> 84 will install only boost_thread and boost_system. 85 </p> 86<p> 87 Users of such IDE should force the Boost.Chrono and Boost.DateTime build using 88 </p> 89<pre class="programlisting"><span class="identifier">bjam</span> <span class="identifier">toolset</span><span class="special">=</span><span class="identifier">msvc</span><span class="special">-</span><span class="number">11.0</span> <span class="special">--</span><span class="identifier">build</span><span class="special">-</span><span class="identifier">type</span><span class="special">=</span><span class="identifier">complete</span> <span class="special">--</span><span class="identifier">with</span><span class="special">-</span><span class="identifier">thread</span> <span class="special">--</span><span class="identifier">with</span><span class="special">-</span><span class="identifier">chrono</span> <span class="special">--</span><span class="identifier">with</span><span class="special">-</span><span class="identifier">date_time</span> 90</pre> 91<p> 92 The following section describes all the macros used to configure Boost.Thread. 93 </p> 94<div class="section"> 95<div class="titlepage"><div><div><h3 class="title"> 96<a name="thread.build.configuration"></a><a class="link" href="build.html#thread.build.configuration" title="Configuration">Configuration</a> 97</h3></div></div></div> 98<div class="toc"><dl class="toc"> 99<dt><span class="section"><a href="build.html#thread.build.configuration.chrono">Boost.Chrono</a></span></dt> 100<dt><span class="section"><a href="build.html#thread.build.configuration.move">Boost.Move</a></span></dt> 101<dt><span class="section"><a href="build.html#thread.build.configuration.date_time">Boost.DateTime</a></span></dt> 102<dt><span class="section"><a href="build.html#thread.build.configuration.move0">Boost.Atomic</a></span></dt> 103<dt><span class="section"><a href="build.html#thread.build.configuration.thread_eq"><code class="computeroutput"><span class="identifier">boost</span><span class="special">::</span><span class="identifier">thread</span><span class="special">::</span><span class="keyword">operator</span><span class="special">==</span></code> 104 deprecated</a></span></dt> 105<dt><span class="section"><a href="build.html#thread.build.configuration.condition">boost::condition 106 deprecated</a></span></dt> 107<dt><span class="section"><a href="build.html#thread.build.configuration.nested_lock">Mutex nested 108 lock types deprecated</a></span></dt> 109<dt><span class="section"><a href="build.html#thread.build.configuration.id">thread::id</a></span></dt> 110<dt><span class="section"><a href="build.html#thread.build.configuration.shared_gen">Shared Locking 111 Generic</a></span></dt> 112<dt><span class="section"><a href="build.html#thread.build.configuration.shared_upwards">Shared Locking 113 Upwards Conversion</a></span></dt> 114<dt><span class="section"><a href="build.html#thread.build.configuration.explicit_cnv">Explicit Lock 115 Conversion</a></span></dt> 116<dt><span class="section"><a href="build.html#thread.build.configuration.future">unique_future versus 117 future</a></span></dt> 118<dt><span class="section"><a href="build.html#thread.build.configuration.lazy">promise lazy initialization</a></span></dt> 119<dt><span class="section"><a href="build.html#thread.build.configuration.alloc">promise Allocator 120 constructor</a></span></dt> 121<dt><span class="section"><a href="build.html#thread.build.configuration.terminate">Call to terminate 122 if joinable</a></span></dt> 123<dt><span class="section"><a href="build.html#thread.build.configuration.once_flag">once_flag</a></span></dt> 124<dt><span class="section"><a href="build.html#thread.build.configuration.deprecated">Signature parameter 125 for packaged_task</a></span></dt> 126<dt><span class="section"><a href="build.html#thread.build.configuration.thread_const">-var thread 127 constructor with variadic rvalue parameters</a></span></dt> 128<dt><span class="section"><a href="build.html#thread.build.configuration.get_invalid">future<>::get() 129 invalidates the future</a></span></dt> 130<dt><span class="section"><a href="build.html#thread.build.configuration.intr">Interruptions</a></span></dt> 131<dt><span class="section"><a href="build.html#thread.build.configuration.version">Version</a></span></dt> 132</dl></div> 133<div class="table"> 134<a name="thread.build.configuration.default_values_for_configurable_features"></a><p class="title"><b>Table 39.1. Default Values for Configurable Features</b></p> 135<div class="table-contents"><table class="table" summary="Default Values for Configurable Features"> 136<colgroup> 137<col> 138<col> 139<col> 140<col> 141<col> 142<col> 143</colgroup> 144<thead><tr> 145<th> 146 <p> 147 Feature 148 </p> 149 </th> 150<th> 151 <p> 152 Anti-Feature 153 </p> 154 </th> 155<th> 156 <p> 157 V2 158 </p> 159 </th> 160<th> 161 <p> 162 V3 163 </p> 164 </th> 165<th> 166 <p> 167 V4 168 </p> 169 </th> 170<th> 171 <p> 172 V5 173 </p> 174 </th> 175</tr></thead> 176<tbody> 177<tr> 178<td> 179 <p> 180 USES_CHRONO 181 </p> 182 </td> 183<td> 184 <p> 185 DONT_USE_CHRONO 186 </p> 187 </td> 188<td> 189 <p> 190 YES/NO 191 </p> 192 </td> 193<td> 194 <p> 195 YES/NO 196 </p> 197 </td> 198<td> 199 <p> 200 YES/NO 201 </p> 202 </td> 203<td> 204 <p> 205 YES/NO 206 </p> 207 </td> 208</tr> 209<tr> 210<td> 211 <p> 212 PROVIDES_INTERRUPTIONS 213 </p> 214 </td> 215<td> 216 <p> 217 DONT_PROVIDE_INTERRUPTIONS 218 </p> 219 </td> 220<td> 221 <p> 222 YES 223 </p> 224 </td> 225<td> 226 <p> 227 YES 228 </p> 229 </td> 230<td> 231 <p> 232 YES 233 </p> 234 </td> 235<td> 236 <p> 237 YES 238 </p> 239 </td> 240</tr> 241<tr> 242<td> 243 <p> 244 THROW_IF_PRECONDITION_NOT_SATISFIED 245 </p> 246 </td> 247<td> 248 <p> 249 - 250 </p> 251 </td> 252<td> 253 <p> 254 NO 255 </p> 256 </td> 257<td> 258 <p> 259 NO 260 </p> 261 </td> 262<td> 263 <p> 264 NO 265 </p> 266 </td> 267<td> 268 <p> 269 NO 270 </p> 271 </td> 272</tr> 273<tr> 274<td> 275 <p> 276 PROVIDES_PROMISE_LAZY 277 </p> 278 </td> 279<td> 280 <p> 281 DONT_PROVIDE_PROMISE_LAZY 282 </p> 283 </td> 284<td> 285 <p> 286 YES 287 </p> 288 </td> 289<td> 290 <p> 291 NO 292 </p> 293 </td> 294<td> 295 <p> 296 NO 297 </p> 298 </td> 299<td> 300 <p> 301 NO 302 </p> 303 </td> 304</tr> 305<tr> 306<td> 307 <p> 308 PROVIDES_BASIC_THREAD_ID 309 </p> 310 </td> 311<td> 312 <p> 313 DONT_PROVIDE_BASIC_THREAD_ID 314 </p> 315 </td> 316<td> 317 <p> 318 NO 319 </p> 320 </td> 321<td> 322 <p> 323 YES 324 </p> 325 </td> 326<td> 327 <p> 328 YES 329 </p> 330 </td> 331<td> 332 <p> 333 YES 334 </p> 335 </td> 336</tr> 337<tr> 338<td> 339 <p> 340 PROVIDES_GENERIC_SHARED_MUTEX_ON_WIN 341 </p> 342 </td> 343<td> 344 <p> 345 DONT_PROVIDE_GENERIC_SHARED_MUTEX_ON_WIN 346 </p> 347 </td> 348<td> 349 <p> 350 NO 351 </p> 352 </td> 353<td> 354 <p> 355 YES 356 </p> 357 </td> 358<td> 359 <p> 360 YES 361 </p> 362 </td> 363<td> 364 <p> 365 YES 366 </p> 367 </td> 368</tr> 369<tr> 370<td> 371 <p> 372 PROVIDES_SHARED_MUTEX_UPWARDS_CONVERSION 373 </p> 374 </td> 375<td> 376 <p> 377 DONT_PROVIDE_SHARED_MUTEX_UPWARDS_CONVERSION 378 </p> 379 </td> 380<td> 381 <p> 382 NO 383 </p> 384 </td> 385<td> 386 <p> 387 YES 388 </p> 389 </td> 390<td> 391 <p> 392 YES 393 </p> 394 </td> 395<td> 396 <p> 397 YES 398 </p> 399 </td> 400</tr> 401<tr> 402<td> 403 <p> 404 PROVIDES_EXECUTORS 405 </p> 406 </td> 407<td> 408 <p> 409 - 410 </p> 411 </td> 412<td> 413 <p> 414 NO 415 </p> 416 </td> 417<td> 418 <p> 419 NO 420 </p> 421 </td> 422<td> 423 <p> 424 NO 425 </p> 426 </td> 427<td> 428 <p> 429 YES 430 </p> 431 </td> 432</tr> 433<tr> 434<td> 435 <p> 436 PROVIDES_EXPLICIT_LOCK_CONVERSION 437 </p> 438 </td> 439<td> 440 <p> 441 DONT_PROVIDE_EXPLICIT_LOCK_CONVERSION 442 </p> 443 </td> 444<td> 445 <p> 446 NO 447 </p> 448 </td> 449<td> 450 <p> 451 YES 452 </p> 453 </td> 454<td> 455 <p> 456 YES 457 </p> 458 </td> 459<td> 460 <p> 461 YES 462 </p> 463 </td> 464</tr> 465<tr> 466<td> 467 <p> 468 PROVIDES_FUTURE 469 </p> 470 </td> 471<td> 472 <p> 473 DONT_PROVIDE_FUTURE 474 </p> 475 </td> 476<td> 477 <p> 478 NO 479 </p> 480 </td> 481<td> 482 <p> 483 YES 484 </p> 485 </td> 486<td> 487 <p> 488 YES 489 </p> 490 </td> 491<td> 492 <p> 493 YES 494 </p> 495 </td> 496</tr> 497<tr> 498<td> 499 <p> 500 PROVIDES_FUTURE_CTOR_ALLOCATORS 501 </p> 502 </td> 503<td> 504 <p> 505 DONT_PROVIDE_FUTURE_CTOR_ALLOCATORS 506 </p> 507 </td> 508<td> 509 <p> 510 NO 511 </p> 512 </td> 513<td> 514 <p> 515 YES 516 </p> 517 </td> 518<td> 519 <p> 520 YES 521 </p> 522 </td> 523<td> 524 <p> 525 YES 526 </p> 527 </td> 528</tr> 529<tr> 530<td> 531 <p> 532 PROVIDES_THREAD_DESTRUCTOR_CALLS_TERMINATE_IF_JOINABLE 533 </p> 534 </td> 535<td> 536 <p> 537 DONT_PROVIDE_THREAD_DESTRUCTOR_CALLS_TERMINATE_IF_JOINABLE 538 </p> 539 </td> 540<td> 541 <p> 542 NO 543 </p> 544 </td> 545<td> 546 <p> 547 YES 548 </p> 549 </td> 550<td> 551 <p> 552 YES 553 </p> 554 </td> 555<td> 556 <p> 557 YES 558 </p> 559 </td> 560</tr> 561<tr> 562<td> 563 <p> 564 PROVIDES_THREAD_MOVE_ASSIGN_CALLS_TERMINATE_IF_JOINABLE 565 </p> 566 </td> 567<td> 568 <p> 569 DONT_PROVIDE_THREAD_MOVE_ASSIGN_CALLS_TERMINATE_IF_JOINABLE 570 </p> 571 </td> 572<td> 573 <p> 574 NO 575 </p> 576 </td> 577<td> 578 <p> 579 YES 580 </p> 581 </td> 582<td> 583 <p> 584 YES 585 </p> 586 </td> 587<td> 588 <p> 589 YES 590 </p> 591 </td> 592</tr> 593<tr> 594<td> 595 <p> 596 PROVIDES_ONCE_CXX11 597 </p> 598 </td> 599<td> 600 <p> 601 DONT_PROVIDE_ONCE_CXX11 602 </p> 603 </td> 604<td> 605 <p> 606 NO 607 </p> 608 </td> 609<td> 610 <p> 611 YES 612 </p> 613 </td> 614<td> 615 <p> 616 YES 617 </p> 618 </td> 619<td> 620 <p> 621 YES 622 </p> 623 </td> 624</tr> 625<tr> 626<td> 627 <p> 628 USES_MOVE 629 </p> 630 </td> 631<td> 632 <p> 633 DONT_USE_MOVE 634 </p> 635 </td> 636<td> 637 <p> 638 NO 639 </p> 640 </td> 641<td> 642 <p> 643 YES 644 </p> 645 </td> 646<td> 647 <p> 648 YES 649 </p> 650 </td> 651<td> 652 <p> 653 YES 654 </p> 655 </td> 656</tr> 657<tr> 658<td> 659 <p> 660 USES_DATETIME 661 </p> 662 </td> 663<td> 664 <p> 665 DONT_USE_DATETIME 666 </p> 667 </td> 668<td> 669 <p> 670 YES/NO 671 </p> 672 </td> 673<td> 674 <p> 675 YES/NO 676 </p> 677 </td> 678<td> 679 <p> 680 YES/NO 681 </p> 682 </td> 683<td> 684 <p> 685 YES/NO 686 </p> 687 </td> 688</tr> 689<tr> 690<td> 691 <p> 692 PROVIDES_THREAD_EQ 693 </p> 694 </td> 695<td> 696 <p> 697 DONT_PROVIDE_THREAD_EQ 698 </p> 699 </td> 700<td> 701 <p> 702 YES 703 </p> 704 </td> 705<td> 706 <p> 707 YES 708 </p> 709 </td> 710<td> 711 <p> 712 NO 713 </p> 714 </td> 715<td> 716 <p> 717 NO 718 </p> 719 </td> 720</tr> 721<tr> 722<td> 723 <p> 724 PROVIDES_CONDITION 725 </p> 726 </td> 727<td> 728 <p> 729 DONT_PROVIDE_CONDITION 730 </p> 731 </td> 732<td> 733 <p> 734 YES 735 </p> 736 </td> 737<td> 738 <p> 739 YES 740 </p> 741 </td> 742<td> 743 <p> 744 NO 745 </p> 746 </td> 747<td> 748 <p> 749 NO 750 </p> 751 </td> 752</tr> 753<tr> 754<td> 755 <p> 756 PROVIDES_NESTED_LOCKS 757 </p> 758 </td> 759<td> 760 <p> 761 DONT_PROVIDE_NESTED_LOCKS 762 </p> 763 </td> 764<td> 765 <p> 766 YES 767 </p> 768 </td> 769<td> 770 <p> 771 YES 772 </p> 773 </td> 774<td> 775 <p> 776 NO 777 </p> 778 </td> 779<td> 780 <p> 781 NO 782 </p> 783 </td> 784</tr> 785<tr> 786<td> 787 <p> 788 PROVIDES_SIGNATURE_PACKAGED_TASK 789 </p> 790 </td> 791<td> 792 <p> 793 DONT_PROVIDE_SIGNATURE_PACKAGED_TASK 794 </p> 795 </td> 796<td> 797 <p> 798 NO 799 </p> 800 </td> 801<td> 802 <p> 803 NO 804 </p> 805 </td> 806<td> 807 <p> 808 YES 809 </p> 810 </td> 811<td> 812 <p> 813 YES 814 </p> 815 </td> 816</tr> 817<tr> 818<td> 819 <p> 820 PROVIDES_FUTURE_INVALID_AFTER_GET 821 </p> 822 </td> 823<td> 824 <p> 825 DONT_PROVIDE_FUTURE_INVALID_AFTER_GET 826 </p> 827 </td> 828<td> 829 <p> 830 NO 831 </p> 832 </td> 833<td> 834 <p> 835 NO 836 </p> 837 </td> 838<td> 839 <p> 840 YES 841 </p> 842 </td> 843<td> 844 <p> 845 YES 846 </p> 847 </td> 848</tr> 849<tr> 850<td> 851 <p> 852 PROVIDES_VARIADIC_THREAD 853 </p> 854 </td> 855<td> 856 <p> 857 DONT_PROVIDE_VARIADIC_THREAD 858 </p> 859 </td> 860<td> 861 <p> 862 NO 863 </p> 864 </td> 865<td> 866 <p> 867 NO 868 </p> 869 </td> 870<td> 871 <p> 872 C++11 873 </p> 874 </td> 875<td> 876 <p> 877 C++11 878 </p> 879 </td> 880</tr> 881</tbody> 882</table></div> 883</div> 884<br class="table-break"><div class="section"> 885<div class="titlepage"><div><div><h4 class="title"> 886<a name="thread.build.configuration.chrono"></a><a class="link" href="build.html#thread.build.configuration.chrono" title="Boost.Chrono">Boost.Chrono</a> 887</h4></div></div></div> 888<p> 889 Boost.Thread uses by default Boost.Chrono for the time related functions 890 and define <code class="computeroutput"><span class="identifier">BOOST_THREAD_USES_CHRONO</span></code> 891 if <code class="computeroutput"><span class="identifier">BOOST_THREAD_DONT_USE_CHRONO</span></code> 892 is not defined. The user should define <code class="computeroutput"><span class="identifier">BOOST_THREAD_DONT_USE_CHRONO</span></code> 893 for compilers that don't work well with Boost.Chrono. 894 </p> 895<div class="warning"><table border="0" summary="Warning"> 896<tr> 897<td rowspan="2" align="center" valign="top" width="25"><img alt="[Warning]" src="../../../doc/src/images/warning.png"></td> 898<th align="left">Warning</th> 899</tr> 900<tr><td align="left" valign="top"><p> 901 When defined BOOST_THREAD_PLATFORM_WIN32 BOOST_THREAD_USES_CHRONO is 902 defined independently of user settings. 903 </p></td></tr> 904</table></div> 905</div> 906<div class="section"> 907<div class="titlepage"><div><div><h4 class="title"> 908<a name="thread.build.configuration.move"></a><a class="link" href="build.html#thread.build.configuration.move" title="Boost.Move">Boost.Move</a> 909</h4></div></div></div> 910<p> 911 Boost.Thread uses by default an internal move semantic implementation. 912 Since version 3.0.0 you can use the move emulation emulation provided by 913 Boost.Move. 914 </p> 915<p> 916 When <code class="computeroutput"><span class="identifier">BOOST_THREAD_VERSION</span><span class="special">==</span><span class="number">2</span></code> define 917 <code class="computeroutput"><span class="identifier">BOOST_THREAD_USES_MOVE</span> </code> 918 if you want to use Boost.Move interface. When <code class="computeroutput"><span class="identifier">BOOST_THREAD_VERSION</span><span class="special">>=</span><span class="number">3</span></code> define 919 <code class="computeroutput"><span class="identifier">BOOST_THREAD_DONT_USE_MOVE</span> </code> 920 if you don't want to use Boost.Move interface. 921 </p> 922</div> 923<div class="section"> 924<div class="titlepage"><div><div><h4 class="title"> 925<a name="thread.build.configuration.date_time"></a><a class="link" href="build.html#thread.build.configuration.date_time" title="Boost.DateTime">Boost.DateTime</a> 926</h4></div></div></div> 927<p> 928 The Boost.DateTime time related functions introduced in Boost 1.35.0, using 929 the <a class="link" href="../date_time.html" title="Chapter 13. Boost.Date_Time">Boost.Date_Time</a> library are deprecated. 930 These include (but are not limited to): 931 </p> 932<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "> 933<li class="listitem"> 934 <a class="link" href="thread_management.html#thread.thread_management.this_thread.sleep" title="Non-member function sleep() DEPRECATED"><code class="computeroutput"><span class="identifier">boost</span><span class="special">::</span><span class="identifier">this_thread</span><span class="special">::</span><span class="identifier">sleep</span><span class="special">()</span></code></a> 935 </li> 936<li class="listitem"> 937 <a class="link" href="thread_management.html#thread.thread_management.thread.timed_join" title="Member function timed_join() DEPRECATED"><code class="computeroutput"><span class="identifier">timed_join</span><span class="special">()</span></code></a> 938 </li> 939<li class="listitem"> 940 <a class="link" href="synchronization.html#thread.synchronization.condvar_ref.condition_variable.timed_wait" title="bool timed_wait(boost::unique_lock<boost::mutex>& lock,boost::system_time const& abs_time)"><code class="computeroutput"><span class="identifier">timed_wait</span><span class="special">()</span></code></a> 941 </li> 942<li class="listitem"> 943 <a class="link" href="synchronization.html#thread.synchronization.mutex_concepts.timed_lockable.timed_lock" title="m.timed_lock(abs_time)"><code class="computeroutput"><span class="identifier">timed_lock</span><span class="special">()</span></code></a> 944 </li> 945</ul></div> 946<p> 947 When <code class="computeroutput"><span class="identifier">BOOST_THREAD_VERSION</span><span class="special"><=</span><span class="number">3</span></code> && 948 defined BOOST_THREAD_PLATFORM_PTHREAD define <code class="computeroutput"><span class="identifier">BOOST_THREAD_DONT_USE_DATETIME</span></code> 949 if you don't want to use Boost.DateTime related interfaces. When <code class="computeroutput"><span class="identifier">BOOST_THREAD_VERSION</span><span class="special">></span><span class="number">3</span></code> && defined BOOST_THREAD_PLATFORM_PTHREAD 950 define <code class="computeroutput"><span class="identifier">BOOST_THREAD_USES_DATETIME</span></code> 951 if you want to use Boost.DateTime related interfaces. 952 </p> 953<div class="warning"><table border="0" summary="Warning"> 954<tr> 955<td rowspan="2" align="center" valign="top" width="25"><img alt="[Warning]" src="../../../doc/src/images/warning.png"></td> 956<th align="left">Warning</th> 957</tr> 958<tr><td align="left" valign="top"><p> 959 When defined BOOST_THREAD_PLATFORM_WIN32 BOOST_THREAD_USES_DATETIME is 960 defined independently of user settings. 961 </p></td></tr> 962</table></div> 963</div> 964<div class="section"> 965<div class="titlepage"><div><div><h4 class="title"> 966<a name="thread.build.configuration.move0"></a><a class="link" href="build.html#thread.build.configuration.move0" title="Boost.Atomic">Boost.Atomic</a> 967</h4></div></div></div> 968<p> 969 Boost.Thread uses by default Boost.Atomic in POSIX platforms to implement 970 call_once.. 971 </p> 972<p> 973 Define <code class="computeroutput"><span class="identifier">BOOST_THREAD_USES_ATOMIC</span> 974 </code> if you want to use Boost.Atomic. Define <code class="computeroutput"><span class="identifier">BOOST_THREAD_DONT_USE_ATOMIC</span> 975 </code> if you don't want to use Boost.Atomic or if it is not supported 976 in your platform. 977 </p> 978</div> 979<div class="section"> 980<div class="titlepage"><div><div><h4 class="title"> 981<a name="thread.build.configuration.thread_eq"></a><a class="link" href="build.html#thread.build.configuration.thread_eq" title="boost::thread::operator== deprecated"><code class="computeroutput"><span class="identifier">boost</span><span class="special">::</span><span class="identifier">thread</span><span class="special">::</span><span class="keyword">operator</span><span class="special">==</span></code> 982 deprecated</a> 983</h4></div></div></div> 984<p> 985 The following operators are deprecated: 986 </p> 987<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "> 988<li class="listitem"> 989 <code class="computeroutput"><span class="identifier">boost</span><span class="special">::</span><span class="identifier">thread</span><span class="special">::</span><span class="keyword">operator</span><span class="special">==</span></code> 990 </li> 991<li class="listitem"> 992 <code class="computeroutput"><span class="identifier">boost</span><span class="special">::</span><span class="identifier">thread</span><span class="special">::</span><span class="keyword">operator</span><span class="special">!=</span></code> 993 </li> 994</ul></div> 995<p> 996 When <code class="computeroutput"><span class="identifier">BOOST_THREAD_PROVIDES_THREAD_EQ</span></code> 997 is defined Boost.Thread provides these deprecated feature. 998 </p> 999<p> 1000 Use instead 1001 </p> 1002<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "> 1003<li class="listitem"> 1004 <code class="computeroutput"><span class="identifier">boost</span><span class="special">::</span><span class="identifier">thread</span><span class="special">::</span><span class="identifier">id</span><span class="special">::</span><span class="keyword">operator</span><span class="special">==</span></code> 1005 </li> 1006<li class="listitem"> 1007 <code class="computeroutput"><span class="identifier">boost</span><span class="special">::</span><span class="identifier">thread</span><span class="special">::</span><span class="identifier">id</span><span class="special">::</span><span class="keyword">operator</span><span class="special">!=</span></code> 1008 </li> 1009</ul></div> 1010<div class="warning"><table border="0" summary="Warning"> 1011<tr> 1012<td rowspan="2" align="center" valign="top" width="25"><img alt="[Warning]" src="../../../doc/src/images/warning.png"></td> 1013<th align="left">Warning</th> 1014</tr> 1015<tr><td align="left" valign="top"><p> 1016 This is a breaking change respect to version 1.x. 1017 </p></td></tr> 1018</table></div> 1019<p> 1020 When <code class="computeroutput"><span class="identifier">BOOST_THREAD_VERSION</span><span class="special">>=</span><span class="number">4</span></code> define 1021 <code class="computeroutput"><span class="identifier">BOOST_THREAD_PROVIDES_THREAD_EQ</span> 1022 </code> if you want this feature. When <code class="computeroutput"><span class="identifier">BOOST_THREAD_VERSION</span><span class="special"><</span><span class="number">4</span></code> define 1023 <code class="computeroutput"><span class="identifier">BOOST_THREAD_DONT_PROVIDE_THREAD_EQ</span> 1024 </code> if you don't want this feature. 1025 </p> 1026</div> 1027<div class="section"> 1028<div class="titlepage"><div><div><h4 class="title"> 1029<a name="thread.build.configuration.condition"></a><a class="link" href="build.html#thread.build.configuration.condition" title="boost::condition deprecated">boost::condition 1030 deprecated</a> 1031</h4></div></div></div> 1032<p> 1033 <code class="computeroutput"><span class="identifier">boost</span><span class="special">::</span><span class="identifier">condition</span></code> is deprecated. When <code class="computeroutput"><span class="identifier">BOOST_THREAD_PROVIDES_CONDITION</span></code> is defined 1034 Boost.Thread provides this deprecated feature. 1035 </p> 1036<p> 1037 Use instead <code class="computeroutput"><span class="identifier">boost</span><span class="special">::</span><span class="identifier">condition_variable_any</span></code>. 1038 </p> 1039<div class="warning"><table border="0" summary="Warning"> 1040<tr> 1041<td rowspan="2" align="center" valign="top" width="25"><img alt="[Warning]" src="../../../doc/src/images/warning.png"></td> 1042<th align="left">Warning</th> 1043</tr> 1044<tr><td align="left" valign="top"><p> 1045 This is a breaking change respect to version 1.x. 1046 </p></td></tr> 1047</table></div> 1048<p> 1049 When <code class="computeroutput"><span class="identifier">BOOST_THREAD_VERSION</span><span class="special">></span><span class="number">3</span></code> define 1050 <code class="computeroutput"><span class="identifier">BOOST_THREAD_PROVIDES_CONDITION</span></code> 1051 if you want this feature. When <code class="computeroutput"><span class="identifier">BOOST_THREAD_VERSION</span><span class="special"><=</span><span class="number">3</span></code> define 1052 <code class="computeroutput"><span class="identifier">BOOST_THREAD_DONT_PROVIDE_CONDITION</span></code> 1053 if you don't want this feature. 1054 </p> 1055</div> 1056<div class="section"> 1057<div class="titlepage"><div><div><h4 class="title"> 1058<a name="thread.build.configuration.nested_lock"></a><a class="link" href="build.html#thread.build.configuration.nested_lock" title="Mutex nested lock types deprecated">Mutex nested 1059 lock types deprecated</a> 1060</h4></div></div></div> 1061<p> 1062 The following nested typedefs are deprecated: 1063 </p> 1064<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "> 1065<li class="listitem"> 1066 <code class="computeroutput"><span class="identifier">boost</span><span class="special">::</span><span class="identifier">mutex</span><span class="special">::</span><span class="identifier">scoped_lock</span></code>, 1067 </li> 1068<li class="listitem"> 1069 <code class="computeroutput"><span class="identifier">boost</span><span class="special">::</span><span class="identifier">mutex</span><span class="special">::</span><span class="identifier">scoped_try_lock</span></code>, 1070 </li> 1071<li class="listitem"> 1072 <code class="computeroutput"><span class="identifier">boost</span><span class="special">::</span><span class="identifier">timed_mutex</span><span class="special">::</span><span class="identifier">scoped_lock</span></code> 1073 </li> 1074<li class="listitem"> 1075 <code class="computeroutput"><span class="identifier">boost</span><span class="special">::</span><span class="identifier">timed_mutex</span><span class="special">::</span><span class="identifier">scoped_try_lock</span></code> 1076 </li> 1077<li class="listitem"> 1078 <code class="computeroutput"><span class="identifier">boost</span><span class="special">::</span><span class="identifier">timed_mutex</span><span class="special">::</span><span class="identifier">timed_scoped_timed_lock</span></code> 1079 </li> 1080<li class="listitem"> 1081 <code class="computeroutput"><span class="identifier">boost</span><span class="special">::</span><span class="identifier">recursive_mutex</span><span class="special">::</span><span class="identifier">scoped_lock</span></code>, 1082 </li> 1083<li class="listitem"> 1084 <code class="computeroutput"><span class="identifier">boost</span><span class="special">::</span><span class="identifier">recursive_mutex</span><span class="special">::</span><span class="identifier">scoped_try_lock</span></code>, 1085 </li> 1086<li class="listitem"> 1087 <code class="computeroutput"><span class="identifier">boost</span><span class="special">::</span><span class="identifier">recursive_timed_mutex</span><span class="special">::</span><span class="identifier">scoped_lock</span></code> 1088 </li> 1089<li class="listitem"> 1090 <code class="computeroutput"><span class="identifier">boost</span><span class="special">::</span><span class="identifier">recursive_timed_mutex</span><span class="special">::</span><span class="identifier">scoped_try_lock</span></code> 1091 </li> 1092<li class="listitem"> 1093 <code class="computeroutput"><span class="identifier">boost</span><span class="special">::</span><span class="identifier">recursive_timed_mutex</span><span class="special">::</span><span class="identifier">timed_scoped_timed_lock</span></code> 1094 </li> 1095</ul></div> 1096<p> 1097 When <code class="computeroutput"><span class="identifier">BOOST_THREAD_PROVIDES_NESTED_LOCKS</span></code> 1098 is defined Boost.Thread provides these deprecated feature. 1099 </p> 1100<p> 1101 Use instead * <code class="computeroutput"><span class="identifier">boost</span><span class="special">::</span><span class="identifier">unique_lock</span><span class="special"><</span><span class="identifier">boost</span><span class="special">::</span><span class="identifier">mutex</span><span class="special">></span></code>, 1102 * <code class="computeroutput"><span class="identifier">boost</span><span class="special">::</span><span class="identifier">unique_lock</span><span class="special"><</span><span class="identifier">boost</span><span class="special">::</span><span class="identifier">mutex</span><span class="special">></span></code> 1103 with the <code class="computeroutput"><span class="identifier">try_to_lock_t</span></code> 1104 constructor, * <code class="computeroutput"><span class="identifier">boost</span><span class="special">::</span><span class="identifier">unique_lock</span><span class="special"><</span><span class="identifier">boost</span><span class="special">::</span><span class="identifier">timed_mutex</span><span class="special">></span></code> 1105 * <code class="computeroutput"><span class="identifier">boost</span><span class="special">::</span><span class="identifier">unique_lock</span><span class="special"><</span><span class="identifier">boost</span><span class="special">::</span><span class="identifier">timed_mutex</span><span class="special">></span></code> 1106 with the <code class="computeroutput"><span class="identifier">try_to_lock_t</span></code> 1107 constructor * <code class="computeroutput"><span class="identifier">boost</span><span class="special">::</span><span class="identifier">unique_lock</span><span class="special"><</span><span class="identifier">boost</span><span class="special">::</span><span class="identifier">timed_mutex</span><span class="special">></span></code> 1108 * <code class="computeroutput"><span class="identifier">boost</span><span class="special">::</span><span class="identifier">unique_lock</span><span class="special"><</span><span class="identifier">boost</span><span class="special">::</span><span class="identifier">recursive_mutex</span><span class="special">></span></code>, 1109 * <code class="computeroutput"><span class="identifier">boost</span><span class="special">::</span><span class="identifier">unique_lock</span><span class="special"><</span><span class="identifier">boost</span><span class="special">::</span><span class="identifier">recursive_mutex</span><span class="special">></span></code> 1110 with the <code class="computeroutput"><span class="identifier">try_to_lock_t</span></code> 1111 constructor, * <code class="computeroutput"><span class="identifier">boost</span><span class="special">::</span><span class="identifier">unique_lock</span><span class="special"><</span><span class="identifier">boost</span><span class="special">::</span><span class="identifier">recursive_timed_mutex</span><span class="special">></span></code> 1112 * <code class="computeroutput"><span class="identifier">boost</span><span class="special">::</span><span class="identifier">unique_lock</span><span class="special"><</span><span class="identifier">boost</span><span class="special">::</span><span class="identifier">recursive_timed_mutex</span><span class="special">></span></code> 1113 with the <code class="computeroutput"><span class="identifier">try_to_lock_t</span></code> 1114 constructor * <code class="computeroutput"><span class="identifier">boost</span><span class="special">::</span><span class="identifier">unique_lock</span><span class="special"><</span><span class="identifier">boost</span><span class="special">::</span><span class="identifier">recursive_timed_mutex</span><span class="special">></span></code> 1115 </p> 1116<div class="warning"><table border="0" summary="Warning"> 1117<tr> 1118<td rowspan="2" align="center" valign="top" width="25"><img alt="[Warning]" src="../../../doc/src/images/warning.png"></td> 1119<th align="left">Warning</th> 1120</tr> 1121<tr><td align="left" valign="top"><p> 1122 This is a breaking change respect to version 1.x. 1123 </p></td></tr> 1124</table></div> 1125<p> 1126 When <code class="computeroutput"><span class="identifier">BOOST_THREAD_VERSION</span><span class="special">>=</span><span class="number">4</span></code> define 1127 <code class="computeroutput"><span class="identifier">BOOST_THREAD_PROVIDES_NESTED_LOCKS</span></code> 1128 if you want these features. When <code class="computeroutput"><span class="identifier">BOOST_THREAD_VERSION</span><span class="special"><</span><span class="number">4</span></code> define 1129 <code class="computeroutput"><span class="identifier">BOOST_THREAD_DONT_PROVIDE_NESTED_LOCKS</span></code> 1130 if you don't want thes features. 1131 </p> 1132</div> 1133<div class="section"> 1134<div class="titlepage"><div><div><h4 class="title"> 1135<a name="thread.build.configuration.id"></a><a class="link" href="build.html#thread.build.configuration.id" title="thread::id">thread::id</a> 1136</h4></div></div></div> 1137<p> 1138 Boost.Thread uses by default a thread::id on Posix based on the pthread 1139 type (BOOST_THREAD_PROVIDES_BASIC_THREAD_ID). For backward compatibility 1140 and also for compilers that don't work well with this modification the 1141 user can define <code class="computeroutput"><span class="identifier">BOOST_THREAD_DONT_PROVIDE_BASIC_THREAD_ID</span></code>. 1142 </p> 1143<p> 1144 Define <code class="computeroutput"><span class="identifier">BOOST_THREAD_DONT_PROVIDE_BASIC_THREAD_ID</span> 1145 </code> if you don't want these features. 1146 </p> 1147</div> 1148<div class="section"> 1149<div class="titlepage"><div><div><h4 class="title"> 1150<a name="thread.build.configuration.shared_gen"></a><a class="link" href="build.html#thread.build.configuration.shared_gen" title="Shared Locking Generic">Shared Locking 1151 Generic</a> 1152</h4></div></div></div> 1153<p> 1154 The shared mutex implementation on Windows platform provides currently 1155 less functionality than the generic one that is used for PTheads based 1156 platforms. In order to have access to these functions, the user needs to 1157 define <code class="computeroutput"><span class="identifier">BOOST_THREAD_PROVIDES_GENERIC_SHARED_MUTEX_ON_WIN</span></code> 1158 to use the generic implementation, that while could be less efficient, 1159 provides all the functions. 1160 </p> 1161<p> 1162 When <code class="computeroutput"><span class="identifier">BOOST_THREAD_VERSION</span><span class="special">==</span><span class="number">2</span></code> define 1163 <code class="computeroutput"><span class="identifier">BOOST_THREAD_PROVIDES_GENERIC_SHARED_MUTEX_ON_WIN</span> 1164 </code> if you want these features. When <code class="computeroutput"><span class="identifier">BOOST_THREAD_VERSION</span><span class="special">>=</span><span class="number">3</span></code> define 1165 <code class="computeroutput"><span class="identifier">BOOST_THREAD_DONT_PROVIDE_GENERIC_SHARED_MUTEX_ON_WIN</span> 1166 </code> if you don't want these features. 1167 </p> 1168</div> 1169<div class="section"> 1170<div class="titlepage"><div><div><h4 class="title"> 1171<a name="thread.build.configuration.shared_upwards"></a><a class="link" href="build.html#thread.build.configuration.shared_upwards" title="Shared Locking Upwards Conversion">Shared Locking 1172 Upwards Conversion</a> 1173</h4></div></div></div> 1174<p> 1175 Boost.Threads includes in version 3 the Shared Locking Upwards Conversion 1176 as defined in <a href="http://home.roadrunner.com/~hinnant/bloomington/shared_mutex.html" target="_top">Shared 1177 Locking</a>. These conversions need to be used carefully to avoid deadlock 1178 or livelock. The user need to define explicitly <code class="computeroutput"><span class="identifier">BOOST_THREAD_PROVIDES_SHARED_MUTEX_UPWARDS_CONVERSIONS</span></code> 1179 to get these upwards conversions. 1180 </p> 1181<p> 1182 When <code class="computeroutput"><span class="identifier">BOOST_THREAD_VERSION</span><span class="special">==</span><span class="number">2</span></code> define 1183 <code class="computeroutput"><span class="identifier">BOOST_THREAD_PROVIDES_SHARED_MUTEX_UPWARDS_CONVERSIONS</span> 1184 </code> if you want these features. When <code class="computeroutput"><span class="identifier">BOOST_THREAD_VERSION</span><span class="special">>=</span><span class="number">3</span></code> define 1185 <code class="computeroutput"><span class="identifier">BOOST_THREAD_DONT_PROVIDE_SHARED_MUTEX_UPWARDS_CONVERSION</span> 1186 </code> if you don't want these features. 1187 </p> 1188</div> 1189<div class="section"> 1190<div class="titlepage"><div><div><h4 class="title"> 1191<a name="thread.build.configuration.explicit_cnv"></a><a class="link" href="build.html#thread.build.configuration.explicit_cnv" title="Explicit Lock Conversion">Explicit Lock 1192 Conversion</a> 1193</h4></div></div></div> 1194<p> 1195 In <a href="http://home.roadrunner.com/~hinnant/bloomington/shared_mutex.html" target="_top">Shared 1196 Locking</a> the lock conversions are explicit. As this explicit conversion 1197 breaks the lock interfaces, it is provided only if the <code class="computeroutput"><span class="identifier">BOOST_THREAD_PROVIDES_EXPLICIT_LOCK_CONVERSION</span></code> 1198 is defined. 1199 </p> 1200<p> 1201 When <code class="computeroutput"><span class="identifier">BOOST_THREAD_VERSION</span><span class="special">==</span><span class="number">2</span></code> define 1202 <code class="computeroutput"><span class="identifier">BOOST_THREAD_PROVIDES_EXPLICIT_LOCK_CONVERSION</span> 1203 </code> if you want these features. When <code class="computeroutput"><span class="identifier">BOOST_THREAD_VERSION</span><span class="special">==</span><span class="number">3</span></code> define 1204 <code class="computeroutput"><span class="identifier">BOOST_THREAD_DONT_PROVIDE_EXPLICIT_LOCK_CONVERSION</span> 1205 </code> if you don't want these features. 1206 </p> 1207</div> 1208<div class="section"> 1209<div class="titlepage"><div><div><h4 class="title"> 1210<a name="thread.build.configuration.future"></a><a class="link" href="build.html#thread.build.configuration.future" title="unique_future versus future">unique_future versus 1211 future</a> 1212</h4></div></div></div> 1213<p> 1214 C++11 uses <code class="computeroutput"><span class="identifier">std</span><span class="special">::</span><span class="identifier">future</span></code>. Versions of Boost.Thread previous 1215 to version 3.0.0 uses <code class="computeroutput"><span class="identifier">boost</span><span class="special">:</span><span class="identifier">unique_future</span></code>. 1216 Since version 3.0.0 <code class="computeroutput"><span class="identifier">boost</span><span class="special">::</span><span class="identifier">future</span></code> 1217 replaces <code class="computeroutput"><span class="identifier">boost</span><span class="special">::</span><span class="identifier">unique_future</span></code> when <code class="computeroutput"><span class="identifier">BOOST_THREAD_PROVIDES_FUTURE</span></code> 1218 is defined. The documentation doesn't contains anymore however <code class="computeroutput"><span class="identifier">boost</span><span class="special">::</span><span class="identifier">unique_future</span></code>. 1219 </p> 1220<p> 1221 When <code class="computeroutput"><span class="identifier">BOOST_THREAD_VERSION</span><span class="special">==</span><span class="number">2</span></code> define 1222 <code class="computeroutput"><span class="identifier">BOOST_THREAD_PROVIDES_FUTURE</span></code> 1223 if you want to use boost::future. When <code class="computeroutput"><span class="identifier">BOOST_THREAD_VERSION</span><span class="special">>=</span><span class="number">3</span></code> define 1224 <code class="computeroutput"><span class="identifier">BOOST_THREAD_DONT_PROVIDE_FUTURE</span></code> 1225 if you want to use boost::unique_future. 1226 </p> 1227</div> 1228<div class="section"> 1229<div class="titlepage"><div><div><h4 class="title"> 1230<a name="thread.build.configuration.lazy"></a><a class="link" href="build.html#thread.build.configuration.lazy" title="promise lazy initialization">promise lazy initialization</a> 1231</h4></div></div></div> 1232<p> 1233 C++11 promise initialize the associated state at construction time. Versions 1234 of Boost.Thread previous to version 3.0.0 initialize it lazily at any point 1235 in time in which this associated state is needed. 1236 </p> 1237<p> 1238 Since version 3.0.0 this difference in behavior can be configured. When 1239 <code class="computeroutput"><span class="identifier">BOOST_THREAD_PROVIDES_PROMISE_LAZY</span></code> 1240 is defined the backward compatible behavior is provided. 1241 </p> 1242<p> 1243 When <code class="computeroutput"><span class="identifier">BOOST_THREAD_VERSION</span><span class="special">==</span><span class="number">2</span></code> define 1244 <code class="computeroutput"><span class="identifier">BOOST_THREAD_DONT_PROVIDE_PROMISE_LAZY</span> 1245 </code> if you want to use boost::future. When <code class="computeroutput"><span class="identifier">BOOST_THREAD_VERSION</span><span class="special">>=</span><span class="number">3</span></code> define 1246 <code class="computeroutput"><span class="identifier">BOOST_THREAD_PROVIDES_PROMISE_LAZY</span> 1247 </code> if you want to use boost::unique_future. 1248 </p> 1249</div> 1250<div class="section"> 1251<div class="titlepage"><div><div><h4 class="title"> 1252<a name="thread.build.configuration.alloc"></a><a class="link" href="build.html#thread.build.configuration.alloc" title="promise Allocator constructor">promise Allocator 1253 constructor</a> 1254</h4></div></div></div> 1255<p> 1256 C++11 std::promise provides constructors with allocators. 1257 </p> 1258<pre class="programlisting"><span class="keyword">template</span> <span class="special"><</span><span class="keyword">typename</span> <span class="identifier">R</span><span class="special">></span> 1259<span class="keyword">class</span> <span class="identifier">promise</span> 1260<span class="special">{</span> 1261 <span class="keyword">public</span><span class="special">:</span> 1262 <span class="keyword">template</span> <span class="special"><</span><span class="keyword">class</span> <span class="identifier">Allocator</span><span class="special">></span> 1263 <span class="keyword">explicit</span> <span class="identifier">promise</span><span class="special">(</span><span class="identifier">allocator_arg_t</span><span class="special">,</span> <span class="identifier">Allocator</span> <span class="identifier">a</span><span class="special">);</span> 1264 <span class="comment">// ...</span> 1265<span class="special">};</span> 1266<span class="keyword">template</span> <span class="special"><</span><span class="keyword">class</span> <span class="identifier">R</span><span class="special">,</span> <span class="keyword">class</span> <span class="identifier">Alloc</span><span class="special">></span> <span class="keyword">struct</span> <span class="identifier">uses_allocator</span><span class="special"><</span><span class="identifier">promise</span><span class="special"><</span><span class="identifier">R</span><span class="special">>,</span><span class="identifier">Alloc</span><span class="special">>:</span> <span class="identifier">true_type</span> <span class="special">{};</span> 1267</pre> 1268<p> 1269 where 1270 </p> 1271<pre class="programlisting"><span class="keyword">struct</span> <span class="identifier">allocator_arg_t</span> <span class="special">{</span> <span class="special">};</span> 1272<span class="keyword">constexpr</span> <span class="identifier">allocator_arg_t</span> <span class="identifier">allocator_arg</span> <span class="special">=</span> <span class="identifier">allocator_arg_t</span><span class="special">();</span> 1273 1274<span class="keyword">template</span> <span class="special"><</span><span class="keyword">class</span> <span class="identifier">T</span><span class="special">,</span> <span class="keyword">class</span> <span class="identifier">Alloc</span><span class="special">></span> <span class="keyword">struct</span> <span class="identifier">uses_allocator</span><span class="special">;</span> 1275</pre> 1276<p> 1277 Since version 3.0.0 Boost.Thread implements this constructor using the 1278 following interface 1279 </p> 1280<pre class="programlisting"><span class="keyword">namespace</span> <span class="identifier">boost</span> 1281<span class="special">{</span> 1282 <span class="keyword">typedef</span> <span class="identifier">container</span><span class="special">::</span><span class="identifier">allocator_arg_t</span> <span class="identifier">allocator_arg_t</span><span class="special">;</span> 1283 <span class="keyword">constexpr</span> <span class="identifier">allocator_arg_t</span> <span class="identifier">allocator_arg</span> <span class="special">=</span> <span class="special">{};</span> 1284 1285 <span class="keyword">namespace</span> <span class="identifier">container</span> 1286 <span class="special">{</span> 1287 <span class="keyword">template</span> <span class="special"><</span><span class="keyword">class</span> <span class="identifier">R</span><span class="special">,</span> <span class="keyword">class</span> <span class="identifier">Alloc</span><span class="special">></span> 1288 <span class="keyword">struct</span> <span class="identifier">uses_allocator</span><span class="special"><</span><span class="identifier">promise</span><span class="special"><</span><span class="identifier">R</span><span class="special">>,</span><span class="identifier">Alloc</span><span class="special">>:</span> <span class="identifier">true_type</span> <span class="special">{};</span> 1289 <span class="special">}</span> 1290 <span class="keyword">template</span> <span class="special"><</span><span class="keyword">class</span> <span class="identifier">T</span><span class="special">,</span> <span class="keyword">class</span> <span class="identifier">Alloc</span><span class="special">></span> 1291 <span class="keyword">struct</span> <span class="identifier">uses_allocator</span> <span class="special">:</span> <span class="keyword">public</span> <span class="identifier">container</span><span class="special">::</span><span class="identifier">uses_allocator</span><span class="special"><</span><span class="identifier">T</span><span class="special">,</span> <span class="identifier">Alloc</span><span class="special">></span> <span class="special">{};</span> 1292<span class="special">}</span> 1293</pre> 1294<p> 1295 which introduces a dependency on Boost.Container. This feature is provided 1296 only if <code class="computeroutput"><span class="identifier">BOOST_THREAD_PROVIDES_FUTURE_CTOR_ALLOCATORS</span></code> 1297 is defined. 1298 </p> 1299<p> 1300 When <code class="computeroutput"><span class="identifier">BOOST_THREAD_VERSION</span><span class="special">==</span><span class="number">2</span></code> define 1301 <code class="computeroutput"><span class="identifier">BOOST_THREAD_PROVIDES_FUTURE_CTOR_ALLOCATORS</span> 1302 </code> if you want these features. When <code class="computeroutput"><span class="identifier">BOOST_THREAD_VERSION</span><span class="special">>=</span><span class="number">3</span></code> define 1303 <code class="computeroutput"><span class="identifier">BOOST_THREAD_DONT_PROVIDE_FUTURE_CTOR_ALLOCATORS</span> 1304 </code> if you don't want these features. 1305 </p> 1306</div> 1307<div class="section"> 1308<div class="titlepage"><div><div><h4 class="title"> 1309<a name="thread.build.configuration.terminate"></a><a class="link" href="build.html#thread.build.configuration.terminate" title="Call to terminate if joinable">Call to terminate 1310 if joinable</a> 1311</h4></div></div></div> 1312<p> 1313 C++11 has a different semantic for the thread destructor and the move assignment. 1314 Instead of detaching the thread, calls to terminate() if the thread was 1315 joinable. When <code class="computeroutput"><span class="identifier">BOOST_THREAD_PROVIDES_THREAD_DESTRUCTOR_CALLS_TERMINATE_IF_JOINABLE</span></code> 1316 and <code class="computeroutput"><span class="identifier">BOOST_THREAD_PROVIDES_THREAD_MOVE_ASSIGN_CALLS_TERMINATE_IF_JOINABLE</span></code> 1317 is defined Boost.Thread provides the C++ semantic. 1318 </p> 1319<p> 1320 When <code class="computeroutput"><span class="identifier">BOOST_THREAD_VERSION</span><span class="special">==</span><span class="number">2</span></code> define 1321 <code class="computeroutput"><span class="identifier">BOOST_THREAD_PROVIDES_THREAD_DESTRUCTOR_CALLS_TERMINATE_IF_JOINABLE</span> 1322 </code> if you want these features. When <code class="computeroutput"><span class="identifier">BOOST_THREAD_VERSION</span><span class="special">>=</span><span class="number">3</span></code> define 1323 <code class="computeroutput"><span class="identifier">BOOST_THREAD_DONT_PROVIDE_THREAD_DESTRUCTOR_CALLS_TERMINATE_IF_JOINABLE</span> 1324 </code> if you don't want these features. 1325 </p> 1326<p> 1327 When <code class="computeroutput"><span class="identifier">BOOST_THREAD_VERSION</span><span class="special">==</span><span class="number">2</span></code> define 1328 <code class="computeroutput"><span class="identifier">BOOST_THREAD_PROVIDES_THREAD_MOVE_ASSIGN_CALLS_TERMINATE_IF_JOINABLE</span> 1329 </code> if you want these features. When <code class="computeroutput"><span class="identifier">BOOST_THREAD_VERSION</span><span class="special">>=</span><span class="number">3</span></code> define 1330 <code class="computeroutput"><span class="identifier">BOOST_THREAD_DONT_PROVIDE_THREAD_MOVE_ASSIGN_CALLS_TERMINATE_IF_JOINABLE</span> 1331 </code> if you don't want these features. 1332 </p> 1333</div> 1334<div class="section"> 1335<div class="titlepage"><div><div><h4 class="title"> 1336<a name="thread.build.configuration.once_flag"></a><a class="link" href="build.html#thread.build.configuration.once_flag" title="once_flag">once_flag</a> 1337</h4></div></div></div> 1338<p> 1339 C++11 defines a default constructor for once_flag. When <code class="computeroutput"><span class="identifier">BOOST_THREAD_PROVIDES_ONCE_CXX11</span> 1340 </code> is defined Boost.Thread provides this C++ semantics. In this case, 1341 the previous aggregate syntax is not supported. 1342 </p> 1343<pre class="programlisting"><span class="identifier">boost</span><span class="special">::</span><span class="identifier">once_flag</span> <span class="identifier">once</span> <span class="special">=</span> <span class="identifier">BOOST_ONCE_INIT</span><span class="special">;</span> 1344</pre> 1345<p> 1346 You should now just do 1347 </p> 1348<pre class="programlisting"><span class="identifier">boost</span><span class="special">::</span><span class="identifier">once_flag</span> <span class="identifier">once</span><span class="special">;</span> 1349</pre> 1350<p> 1351 When <code class="computeroutput"><span class="identifier">BOOST_THREAD_VERSION</span><span class="special">==</span><span class="number">2</span></code> define 1352 <code class="computeroutput"><span class="identifier">BOOST_THREAD_PROVIDES_ONCE_CXX11</span></code> 1353 if you want these features. When <code class="computeroutput"><span class="identifier">BOOST_THREAD_VERSION</span><span class="special">>=</span><span class="number">3</span></code> define 1354 <code class="computeroutput"><span class="identifier">BOOST_THREAD_DONT_PROVIDE_ONCE_CXX11</span></code> 1355 if you don't want these features. 1356 </p> 1357</div> 1358<div class="section"> 1359<div class="titlepage"><div><div><h4 class="title"> 1360<a name="thread.build.configuration.deprecated"></a><a class="link" href="build.html#thread.build.configuration.deprecated" title="Signature parameter for packaged_task">Signature parameter 1361 for packaged_task</a> 1362</h4></div></div></div> 1363<p> 1364 C++11 packaged task class has a Signature template parameter. When <code class="computeroutput"><span class="identifier">BOOST_THREAD_PROVIDES_SIGNATURE_PACKAGED_TASK</span> 1365 </code> is defined Boost.Thread provides this C++ feature. 1366 </p> 1367<div class="warning"><table border="0" summary="Warning"> 1368<tr> 1369<td rowspan="2" align="center" valign="top" width="25"><img alt="[Warning]" src="../../../doc/src/images/warning.png"></td> 1370<th align="left">Warning</th> 1371</tr> 1372<tr><td align="left" valign="top"><p> 1373 This is a breaking change respect to version 3.x. 1374 </p></td></tr> 1375</table></div> 1376<p> 1377 When <code class="computeroutput"><span class="identifier">BOOST_THREAD_VERSION</span><span class="special"><</span><span class="number">4</span></code> define 1378 <code class="computeroutput"><span class="identifier">BOOST_THREAD_PROVIDES_SIGNATURE_PACKAGED_TASK</span></code> 1379 if you want this feature. When <code class="computeroutput"><span class="identifier">BOOST_THREAD_VERSION</span><span class="special">>=</span><span class="number">4</span></code> define 1380 <code class="computeroutput"><span class="identifier">BOOST_THREAD_DONT_PROVIDE_SIGNATURE_PACKAGED_TASK</span></code> 1381 if you don't want this feature. 1382 </p> 1383</div> 1384<div class="section"> 1385<div class="titlepage"><div><div><h4 class="title"> 1386<a name="thread.build.configuration.thread_const"></a><a class="link" href="build.html#thread.build.configuration.thread_const" title="-var thread constructor with variadic rvalue parameters">-var thread 1387 constructor with variadic rvalue parameters</a> 1388</h4></div></div></div> 1389<p> 1390 C++11 thread constructor accept a variable number of rvalue arguments has. 1391 When <code class="computeroutput"><span class="identifier">BOOST_THREAD_PROVIDES_VARIADIC_THREAD</span> 1392 </code> is defined Boost.Thread provides this C++ feature if the following 1393 are not defined 1394 </p> 1395<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "> 1396<li class="listitem"> 1397 BOOST_NO_SFINAE_EXPR 1398 </li> 1399<li class="listitem"> 1400 BOOST_NO_CXX11_VARIADIC_TEMPLATES 1401 </li> 1402<li class="listitem"> 1403 BOOST_NO_CXX11_DECLTYPE 1404 </li> 1405<li class="listitem"> 1406 BOOST_NO_CXX11_DECLTYPE_N3276 1407 </li> 1408<li class="listitem"> 1409 BOOST_NO_CXX11_RVALUE_REFERENCES 1410 </li> 1411<li class="listitem"> 1412 BOOST_NO_CXX11_TRAILING_RESULT_TYPES 1413 </li> 1414<li class="listitem"> 1415 BOOST_NO_CXX11_RVALUE_REFERENCES 1416 </li> 1417<li class="listitem"> 1418 BOOST_NO_CXX11_HDR_TUPLE 1419 </li> 1420</ul></div> 1421<p> 1422 When <code class="computeroutput"><span class="identifier">BOOST_THREAD_VERSION</span><span class="special">></span><span class="number">4</span></code> define 1423 <code class="computeroutput"><span class="identifier">BOOST_THREAD_DONT_PROVIDE_VARIADIC_THREAD</span> 1424 </code> if you don't want this feature. 1425 </p> 1426</div> 1427<div class="section"> 1428<div class="titlepage"><div><div><h4 class="title"> 1429<a name="thread.build.configuration.get_invalid"></a><a class="link" href="build.html#thread.build.configuration.get_invalid" title="future<>::get() invalidates the future">future<>::get() 1430 invalidates the future</a> 1431</h4></div></div></div> 1432<p> 1433 C++11 future<>::get() invalidates the future once its value has been 1434 obtained. When <code class="computeroutput"><span class="identifier">BOOST_THREAD_PROVIDES_FUTURE_INVALID_AFTER_GET</span> 1435 </code> is defined Boost.Thread provides this C++ feature. 1436 </p> 1437<div class="warning"><table border="0" summary="Warning"> 1438<tr> 1439<td rowspan="2" align="center" valign="top" width="25"><img alt="[Warning]" src="../../../doc/src/images/warning.png"></td> 1440<th align="left">Warning</th> 1441</tr> 1442<tr><td align="left" valign="top"><p> 1443 This is a breaking change respect to version 3.x. 1444 </p></td></tr> 1445</table></div> 1446<p> 1447 When <code class="computeroutput"><span class="identifier">BOOST_THREAD_VERSION</span><span class="special"><</span><span class="number">4</span></code> define 1448 <code class="computeroutput"><span class="identifier">BOOST_THREAD_PROVIDES_FUTURE_INVALID_AFTER_GET</span></code> 1449 if you want this feature. When <code class="computeroutput"><span class="identifier">BOOST_THREAD_VERSION</span><span class="special">>=</span><span class="number">4</span></code> define 1450 <code class="computeroutput"><span class="identifier">BOOST_THREAD_DONT_PROVIDE_FUTURE_INVALID_AFTER_GET</span></code> 1451 if you don't want this feature. 1452 </p> 1453</div> 1454<div class="section"> 1455<div class="titlepage"><div><div><h4 class="title"> 1456<a name="thread.build.configuration.intr"></a><a class="link" href="build.html#thread.build.configuration.intr" title="Interruptions">Interruptions</a> 1457</h4></div></div></div> 1458<p> 1459 Thread interruption, while useful, makes any interruption point less efficient 1460 than if the thread were not interruptible. 1461 </p> 1462<p> 1463 When <code class="computeroutput"><span class="identifier">BOOST_THREAD_PROVIDES_INTERRUPTIONS</span></code> 1464 is defined Boost.Thread provides interruptions. When <code class="computeroutput"><span class="identifier">BOOST_THREAD_DONT_PROVIDE_INTERRUPTIONS</span></code> 1465 is defined Boost.Thread don't provide interruption. 1466 </p> 1467<p> 1468 Boost.Thread defines BOOST_THREAD_PROVIDES_INTERRUPTIONS if neither BOOST_THREAD_PROVIDES_INTERRUPTIONS 1469 nor BOOST_THREAD_DONT_PROVIDE_INTERRUPTIONS are defined, so that there 1470 is no compatibility break. 1471 </p> 1472</div> 1473<div class="section"> 1474<div class="titlepage"><div><div><h4 class="title"> 1475<a name="thread.build.configuration.version"></a><a class="link" href="build.html#thread.build.configuration.version" title="Version">Version</a> 1476</h4></div></div></div> 1477<p> 1478 <code class="computeroutput"><span class="identifier">BOOST_THREAD_VERSION</span></code> defines 1479 the Boost.Thread version. The default version is 2. In this case the following 1480 breaking or extending macros are defined if the opposite is not requested: 1481 </p> 1482<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem"> 1483 <code class="computeroutput"><span class="identifier">BOOST_THREAD_PROVIDES_PROMISE_LAZY</span></code> 1484 </li></ul></div> 1485<p> 1486 The user can request the version 3 by defining <code class="computeroutput"><span class="identifier">BOOST_THREAD_VERSION</span></code> 1487 to 3. In this case the following breaking or extending macros are defined 1488 if the opposite is not requested: 1489 </p> 1490<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "> 1491<li class="listitem"> 1492 Breaking change <code class="computeroutput"><span class="identifier">BOOST_THREAD_PROVIDES_EXPLICIT_LOCK_CONVERSION</span> 1493 </code> 1494 </li> 1495<li class="listitem"> 1496 Conformity & Breaking change <code class="computeroutput"><span class="identifier">BOOST_THREAD_PROVIDES_FUTURE</span></code> 1497 </li> 1498<li class="listitem"> 1499 Uniformity <code class="computeroutput"><span class="identifier">BOOST_THREAD_PROVIDES_GENERIC_SHARED_MUTEX_ON_WIN</span></code> 1500 </li> 1501<li class="listitem"> 1502 Extension <code class="computeroutput"><span class="identifier">BOOST_THREAD_PROVIDES_SHARED_MUTEX_UPWARDS_CONVERSIONS</span></code> 1503 </li> 1504<li class="listitem"> 1505 Conformity <code class="computeroutput"><span class="identifier">BOOST_THREAD_PROVIDES_FUTURE_CTOR_ALLOCATORS</span></code> 1506 </li> 1507<li class="listitem"> 1508 Conformity & Breaking change BOOST_THREAD_PROVIDES_THREAD_DESTRUCTOR_CALLS_TERMINATE_IF_JOINABLE 1509 </li> 1510<li class="listitem"> 1511 Conformity & Breaking change BOOST_THREAD_PROVIDES_THREAD_MOVE_ASSIGN_CALLS_TERMINATE_IF_JOINABLE 1512 </li> 1513<li class="listitem"> 1514 Conformity & Breaking change <code class="computeroutput"><span class="identifier">BOOST_THREAD_PROVIDES_ONCE_CXX11</span></code> 1515 </li> 1516<li class="listitem"> 1517 Breaking change <code class="computeroutput"><span class="identifier">BOOST_THREAD_DONT_PROVIDE_PROMISE_LAZY</span></code> 1518 </li> 1519</ul></div> 1520<p> 1521 The user can request the version 4 by defining <code class="computeroutput"><span class="identifier">BOOST_THREAD_VERSION</span></code> 1522 to 4. In this case the following breaking or extending macros are defined 1523 if the opposite is not requested: 1524 </p> 1525<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "> 1526<li class="listitem"> 1527 Conformity & Breaking change <code class="computeroutput"><span class="identifier">BOOST_THREAD_PROVIDES_SIGNATURE_PACKAGED_TASK</span> 1528 </code> 1529 </li> 1530<li class="listitem"> 1531 Conformity & Breaking change <code class="computeroutput"><span class="identifier">BOOST_THREAD_PROVIDES_FUTURE_INVALID_AFTER_GET</span> 1532 </code> 1533 </li> 1534<li class="listitem"> 1535 Conformity <code class="computeroutput"><span class="identifier">BOOST_THREAD_PROVIDES_VARIADIC_THREAD</span></code> 1536 </li> 1537<li class="listitem"> 1538 Breaking change <code class="computeroutput"><span class="identifier">BOOST_THREAD_DONT_PROVIDE_THREAD_EQ</span></code> 1539 </li> 1540<li class="listitem"> 1541 Breaking change <code class="computeroutput"><span class="identifier">BOOST_THREAD_DONT_USE_DATETIME</span></code> 1542 </li> 1543</ul></div> 1544</div> 1545</div> 1546<div class="section"> 1547<div class="titlepage"><div><div><h3 class="title"> 1548<a name="thread.build.limitations"></a><a class="link" href="build.html#thread.build.limitations" title="Limitations">Limitations</a> 1549</h3></div></div></div> 1550<div class="toc"><dl class="toc"> 1551<dt><span class="section"><a href="build.html#thread.build.limitations.sun">SunPro</a></span></dt> 1552<dt><span class="section"><a href="build.html#thread.build.limitations.vacpp">VACPP</a></span></dt> 1553<dt><span class="section"><a href="build.html#thread.build.limitations.ce">WCE</a></span></dt> 1554</dl></div> 1555<p> 1556 Some compilers don't work correctly with some of the added features. 1557 </p> 1558<div class="section"> 1559<div class="titlepage"><div><div><h4 class="title"> 1560<a name="thread.build.limitations.sun"></a><a class="link" href="build.html#thread.build.limitations.sun" title="SunPro">SunPro</a> 1561</h4></div></div></div> 1562<p> 1563 If __SUNPRO_CC < 0x5100 the library defines 1564 </p> 1565<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem"> 1566 <code class="computeroutput"><span class="identifier">BOOST_THREAD_DONT_USE_MOVE</span></code> 1567 </li></ul></div> 1568<p> 1569 If __SUNPRO_CC < 0x5100 the library defines 1570 </p> 1571<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem"> 1572 <code class="computeroutput"><span class="identifier">BOOST_THREAD_DONT_PROVIDE_FUTURE_CTOR_ALLOCATORS</span></code> 1573 </li></ul></div> 1574</div> 1575<div class="section"> 1576<div class="titlepage"><div><div><h4 class="title"> 1577<a name="thread.build.limitations.vacpp"></a><a class="link" href="build.html#thread.build.limitations.vacpp" title="VACPP">VACPP</a> 1578</h4></div></div></div> 1579<p> 1580 If __IBMCPP__ < 1100 the library defines 1581 </p> 1582<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "> 1583<li class="listitem"> 1584 <code class="computeroutput"><span class="identifier">BOOST_THREAD_DONT_USE_CHRONO</span></code> 1585 </li> 1586<li class="listitem"> 1587 <code class="computeroutput"><span class="identifier">BOOST_THREAD_USES_DATE</span></code> 1588 </li> 1589</ul></div> 1590<p> 1591 And Boost.Thread doesn't links with Boost.Chrono. 1592 </p> 1593</div> 1594<div class="section"> 1595<div class="titlepage"><div><div><h4 class="title"> 1596<a name="thread.build.limitations.ce"></a><a class="link" href="build.html#thread.build.limitations.ce" title="WCE">WCE</a> 1597</h4></div></div></div> 1598<p> 1599 If _WIN32_WCE && _WIN32_WCE==0x501 the library defines 1600 </p> 1601<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem"> 1602 <code class="computeroutput"><span class="identifier">BOOST_THREAD_DONT_PROVIDE_FUTURE_CTOR_ALLOCATORS</span></code> 1603 </li></ul></div> 1604</div> 1605</div> 1606</div> 1607<table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr> 1608<td align="left"></td> 1609<td align="right"><div class="copyright-footer">Copyright © 2007 -11 Anthony Williams<br>Copyright © 2011 -17 Vicente J. Botet Escriba<p> 1610 Distributed under the Boost Software License, Version 1.0. (See accompanying 1611 file LICENSE_1_0.txt or copy at <a href="http://www.boost.org/LICENSE_1_0.txt" target="_top">http://www.boost.org/LICENSE_1_0.txt</a>) 1612 </p> 1613</div></td> 1614</tr></table> 1615<hr> 1616<div class="spirit-nav"> 1617<a accesskey="p" href="../thread.html"><img src="../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../thread.html"><img src="../../../doc/src/images/up.png" alt="Up"></a><a accesskey="h" href="../index.html"><img src="../../../doc/src/images/home.png" alt="Home"></a><a accesskey="n" href="changes.html"><img src="../../../doc/src/images/next.png" alt="Next"></a> 1618</div> 1619</body> 1620</html> 1621