mirror of
https://github.com/boostorg/thread.git
synced 2026-02-09 11:32:12 +00:00
Compare commits
22 Commits
feature/bo
...
boost-1.76
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
409c98f8b7 | ||
|
|
573296557a | ||
|
|
96cd717b33 | ||
|
|
7afa3e9fd4 | ||
|
|
f5bf0951be | ||
|
|
1fceaebe00 | ||
|
|
30f0ec41fe | ||
|
|
49ece352b3 | ||
|
|
116e8f6eb8 | ||
|
|
66892e5ddd | ||
|
|
42a48f4b03 | ||
|
|
f33abfd621 | ||
|
|
0277d357ae | ||
|
|
e18ae7b173 | ||
|
|
119009f2d1 | ||
|
|
9eee38db94 | ||
|
|
3e59ecec49 | ||
|
|
b1842da010 | ||
|
|
b0da8e291b | ||
|
|
1d436f9030 | ||
|
|
8ebd61c280 | ||
|
|
1c28a63e26 |
444
.travis.yml
444
.travis.yml
@@ -4,13 +4,7 @@
|
|||||||
|
|
||||||
language: cpp
|
language: cpp
|
||||||
|
|
||||||
sudo: false
|
os: linux
|
||||||
|
|
||||||
python: "2.7"
|
|
||||||
|
|
||||||
os:
|
|
||||||
- linux
|
|
||||||
- osx
|
|
||||||
|
|
||||||
branches:
|
branches:
|
||||||
only:
|
only:
|
||||||
@@ -29,123 +23,88 @@ matrix:
|
|||||||
|
|
||||||
include:
|
include:
|
||||||
- os: linux
|
- os: linux
|
||||||
compiler: g++
|
compiler: g++-4.4
|
||||||
env: TOOLSET=gcc COMPILER=g++ CXXSTD=c++11 SELF_CONTAINED_HEADER_TESTS=1
|
env: TOOLSET=gcc CXXSTD=98,0x HEADERS_ONLY=1
|
||||||
|
addons:
|
||||||
# - os: linux
|
apt:
|
||||||
# compiler: g++-4.7
|
packages:
|
||||||
# env: TOOLSET=gcc COMPILER=g++-4.7 CXXSTD=c++11
|
- g++-4.4
|
||||||
# addons:
|
sources:
|
||||||
# apt:
|
- ubuntu-toolchain-r-test
|
||||||
# packages:
|
|
||||||
# - g++-4.7
|
- os: linux
|
||||||
# sources:
|
compiler: g++-4.6
|
||||||
# - ubuntu-toolchain-r-test
|
env: TOOLSET=gcc CXXSTD=98,0x HEADERS_ONLY=1
|
||||||
#
|
addons:
|
||||||
# - os: linux
|
apt:
|
||||||
# compiler: g++-4.8
|
packages:
|
||||||
# env: TOOLSET=gcc COMPILER=g++-4.8 CXXSTD=c++11
|
- g++-4.6
|
||||||
# addons:
|
sources:
|
||||||
# apt:
|
- ubuntu-toolchain-r-test
|
||||||
# packages:
|
|
||||||
# - g++-4.8
|
- os: linux
|
||||||
# sources:
|
compiler: g++-4.7
|
||||||
# - ubuntu-toolchain-r-test
|
env: TOOLSET=gcc CXXSTD=03,11 HEADERS_ONLY=1
|
||||||
#
|
addons:
|
||||||
# - os: linux
|
apt:
|
||||||
# compiler: g++-4.9
|
packages:
|
||||||
# env: TOOLSET=gcc COMPILER=g++-4.9 CXXSTD=c++11
|
- g++-4.7
|
||||||
# addons:
|
sources:
|
||||||
# apt:
|
- ubuntu-toolchain-r-test
|
||||||
# packages:
|
|
||||||
# - g++-4.9
|
- os: linux
|
||||||
# sources:
|
compiler: g++-4.8
|
||||||
# - ubuntu-toolchain-r-test
|
env: TOOLSET=gcc CXXSTD=03,11 HEADERS_ONLY=1
|
||||||
#
|
addons:
|
||||||
# - os: linux
|
apt:
|
||||||
# compiler: g++-5
|
packages:
|
||||||
# env: TOOLSET=gcc COMPILER=g++-5 CXXSTD=c++98
|
- g++-4.8
|
||||||
# addons:
|
sources:
|
||||||
# apt:
|
- ubuntu-toolchain-r-test
|
||||||
# packages:
|
|
||||||
# - g++-5
|
- os: linux
|
||||||
# sources:
|
compiler: g++-4.9
|
||||||
# - ubuntu-toolchain-r-test
|
env: TOOLSET=gcc CXXSTD=03,11 HEADERS_ONLY=1
|
||||||
#
|
addons:
|
||||||
# - os: linux
|
apt:
|
||||||
# compiler: g++-5
|
packages:
|
||||||
# env: TOOLSET=gcc COMPILER=g++-5 CXXSTD=c++11
|
- g++-4.9
|
||||||
# addons:
|
sources:
|
||||||
# apt:
|
- ubuntu-toolchain-r-test
|
||||||
# packages:
|
|
||||||
# - g++-5
|
- os: linux
|
||||||
# sources:
|
compiler: g++-5
|
||||||
# - ubuntu-toolchain-r-test
|
env: TOOLSET=gcc CXXSTD=03
|
||||||
#
|
addons:
|
||||||
# - os: linux
|
apt:
|
||||||
# compiler: g++-5
|
packages:
|
||||||
# env: TOOLSET=gcc COMPILER=g++-5 CXXSTD=c++14
|
- g++-5
|
||||||
# addons:
|
sources:
|
||||||
# apt:
|
- ubuntu-toolchain-r-test
|
||||||
# packages:
|
|
||||||
# - g++-5
|
- os: linux
|
||||||
# sources:
|
compiler: g++-5
|
||||||
# - ubuntu-toolchain-r-test
|
env: TOOLSET=gcc CXXSTD=11
|
||||||
#
|
addons:
|
||||||
# - os: linux
|
apt:
|
||||||
# compiler: g++-5
|
packages:
|
||||||
# env: TOOLSET=gcc COMPILER=g++-5 CXXSTD=c++1z
|
- g++-5
|
||||||
# addons:
|
sources:
|
||||||
# apt:
|
- ubuntu-toolchain-r-test
|
||||||
# packages:
|
|
||||||
# - g++-5
|
- os: linux
|
||||||
# sources:
|
compiler: g++-6
|
||||||
# - ubuntu-toolchain-r-test
|
env: TOOLSET=gcc CXXSTD=14,1z HEADERS_ONLY=1
|
||||||
#
|
addons:
|
||||||
# - os: linux
|
apt:
|
||||||
# compiler: g++-6
|
packages:
|
||||||
# env: TOOLSET=gcc COMPILER=g++-6 CXXSTD=c++98
|
- g++-6
|
||||||
# addons:
|
sources:
|
||||||
# apt:
|
- ubuntu-toolchain-r-test
|
||||||
# packages:
|
|
||||||
# - g++-6
|
|
||||||
# sources:
|
|
||||||
# - ubuntu-toolchain-r-test
|
|
||||||
#
|
|
||||||
# - os: linux
|
|
||||||
# compiler: g++-6
|
|
||||||
# env: TOOLSET=gcc COMPILER=g++-6 CXXSTD=c++11
|
|
||||||
# addons:
|
|
||||||
# apt:
|
|
||||||
# packages:
|
|
||||||
# - g++-6
|
|
||||||
# sources:
|
|
||||||
# - ubuntu-toolchain-r-test
|
|
||||||
#
|
|
||||||
# - os: linux
|
|
||||||
# compiler: g++-6
|
|
||||||
# env: TOOLSET=gcc COMPILER=g++-6 CXXSTD=c++14
|
|
||||||
# addons:
|
|
||||||
# apt:
|
|
||||||
# packages:
|
|
||||||
# - g++-6
|
|
||||||
# sources:
|
|
||||||
# - ubuntu-toolchain-r-test
|
|
||||||
#
|
|
||||||
# - os: linux
|
|
||||||
# compiler: g++-6
|
|
||||||
# env: TOOLSET=gcc COMPILER=g++-6 CXXSTD=c++1z
|
|
||||||
# addons:
|
|
||||||
# apt:
|
|
||||||
# packages:
|
|
||||||
# - g++-6
|
|
||||||
# sources:
|
|
||||||
# - ubuntu-toolchain-r-test
|
|
||||||
|
|
||||||
- os: linux
|
- os: linux
|
||||||
dist: trusty
|
|
||||||
compiler: g++-7
|
compiler: g++-7
|
||||||
env: TOOLSET=gcc COMPILER=g++-7 CXXSTD=c++98
|
env: TOOLSET=gcc CXXSTD=14,17 HEADERS_ONLY=1
|
||||||
addons:
|
addons:
|
||||||
apt:
|
apt:
|
||||||
packages:
|
packages:
|
||||||
@@ -154,196 +113,177 @@ matrix:
|
|||||||
- ubuntu-toolchain-r-test
|
- ubuntu-toolchain-r-test
|
||||||
|
|
||||||
- os: linux
|
- os: linux
|
||||||
dist: trusty
|
compiler: g++-8
|
||||||
compiler: g++-7
|
env: TOOLSET=gcc CXXSTD=14,17 HEADERS_ONLY=1
|
||||||
env: TOOLSET=gcc COMPILER=g++-7 CXXSTD=c++11
|
|
||||||
addons:
|
addons:
|
||||||
apt:
|
apt:
|
||||||
packages:
|
packages:
|
||||||
- g++-7
|
- g++-8
|
||||||
|
sources:
|
||||||
|
- ubuntu-toolchain-r-test
|
||||||
|
|
||||||
|
- os: linux
|
||||||
|
compiler: g++-9
|
||||||
|
env: TOOLSET=gcc CXXSTD=14
|
||||||
|
addons:
|
||||||
|
apt:
|
||||||
|
packages:
|
||||||
|
- g++-9
|
||||||
|
sources:
|
||||||
|
- ubuntu-toolchain-r-test
|
||||||
|
|
||||||
|
- os: linux
|
||||||
|
compiler: g++-9
|
||||||
|
env: TOOLSET=gcc CXXSTD=17
|
||||||
|
addons:
|
||||||
|
apt:
|
||||||
|
packages:
|
||||||
|
- g++-9
|
||||||
sources:
|
sources:
|
||||||
- ubuntu-toolchain-r-test
|
- ubuntu-toolchain-r-test
|
||||||
|
|
||||||
- os: linux
|
- os: linux
|
||||||
dist: trusty
|
dist: trusty
|
||||||
compiler: g++-7
|
compiler: clang++-3.5
|
||||||
env: TOOLSET=gcc COMPILER=g++-7 CXXSTD=c++14
|
env: TOOLSET=clang CXXSTD=03,11 HEADERS_ONLY=1
|
||||||
addons:
|
addons:
|
||||||
apt:
|
apt:
|
||||||
packages:
|
packages:
|
||||||
- g++-7
|
- clang-3.5
|
||||||
sources:
|
sources:
|
||||||
- ubuntu-toolchain-r-test
|
- ubuntu-toolchain-r-test
|
||||||
|
|
||||||
- os: linux
|
- os: linux
|
||||||
dist: trusty
|
compiler: clang++-3.6
|
||||||
compiler: g++-7
|
env: TOOLSET=clang CXXSTD=03,11,14 HEADERS_ONLY=1
|
||||||
env: TOOLSET=gcc COMPILER=g++-7 CXXSTD=c++1z
|
|
||||||
addons:
|
addons:
|
||||||
apt:
|
apt:
|
||||||
packages:
|
packages:
|
||||||
- g++-7
|
- clang-3.6
|
||||||
|
sources:
|
||||||
|
- ubuntu-toolchain-r-test
|
||||||
|
|
||||||
|
- os: linux
|
||||||
|
compiler: clang++-3.7
|
||||||
|
env: TOOLSET=clang CXXSTD=03,11,14 HEADERS_ONLY=1
|
||||||
|
addons:
|
||||||
|
apt:
|
||||||
|
packages:
|
||||||
|
- clang-3.7
|
||||||
|
sources:
|
||||||
|
- ubuntu-toolchain-r-test
|
||||||
|
|
||||||
|
- os: linux
|
||||||
|
compiler: clang++-3.8
|
||||||
|
env: TOOLSET=clang CXXSTD=03,11,14 HEADERS_ONLY=1
|
||||||
|
addons:
|
||||||
|
apt:
|
||||||
|
packages:
|
||||||
|
- clang-3.8
|
||||||
|
sources:
|
||||||
|
- ubuntu-toolchain-r-test
|
||||||
|
|
||||||
|
- os: linux
|
||||||
|
compiler: clang++-3.9
|
||||||
|
env: TOOLSET=clang CXXSTD=03,11,14,1z HEADERS_ONLY=1
|
||||||
|
addons:
|
||||||
|
apt:
|
||||||
|
packages:
|
||||||
|
- clang-3.9
|
||||||
sources:
|
sources:
|
||||||
- ubuntu-toolchain-r-test
|
- ubuntu-toolchain-r-test
|
||||||
|
|
||||||
# - os: linux
|
|
||||||
# compiler: clang++-3.5
|
|
||||||
# env: TOOLSET=clang COMPILER=clang++-3.5 CXXSTD=c++11
|
|
||||||
# addons:
|
|
||||||
# apt:
|
|
||||||
# packages:
|
|
||||||
# - clang-3.5
|
|
||||||
# sources:
|
|
||||||
# - ubuntu-toolchain-r-test
|
|
||||||
# - llvm-toolchain-precise-3.5#
|
|
||||||
#
|
|
||||||
# - os: linux
|
|
||||||
# compiler: clang++-3.6
|
|
||||||
# env: TOOLSET=clang COMPILER=clang++-3.6 CXXSTD=c++11
|
|
||||||
# addons:
|
|
||||||
# apt:
|
|
||||||
# packages:
|
|
||||||
# - clang-3.6
|
|
||||||
# sources:
|
|
||||||
# - ubuntu-toolchain-r-test
|
|
||||||
# - llvm-toolchain-precise-3.6
|
|
||||||
#
|
|
||||||
# - os: linux
|
|
||||||
# compiler: clang++-3.7
|
|
||||||
# env: TOOLSET=clang COMPILER=clang++-3.7 CXXSTD=c++11
|
|
||||||
# addons:
|
|
||||||
# apt:
|
|
||||||
# packages:
|
|
||||||
# - clang-3.7
|
|
||||||
# sources:
|
|
||||||
# - ubuntu-toolchain-r-test
|
|
||||||
# - llvm-toolchain-precise-3.7
|
|
||||||
#
|
|
||||||
# - os: linux
|
|
||||||
# compiler: clang++-3.8
|
|
||||||
# env: TOOLSET=clang COMPILER=clang++-3.8 CXXSTD=c++11
|
|
||||||
# addons:
|
|
||||||
# apt:
|
|
||||||
# packages:
|
|
||||||
# - clang-3.8
|
|
||||||
# sources:
|
|
||||||
# - ubuntu-toolchain-r-test
|
|
||||||
# - llvm-toolchain-precise-3.8
|
|
||||||
#
|
|
||||||
# - os: linux
|
|
||||||
# compiler: clang++-3.8
|
|
||||||
# env: TOOLSET=clang COMPILER=clang++-3.8 CXXSTD=c++14
|
|
||||||
# addons:
|
|
||||||
# apt:
|
|
||||||
# packages:
|
|
||||||
# - clang-3.8
|
|
||||||
# sources:
|
|
||||||
# - ubuntu-toolchain-r-test
|
|
||||||
# - llvm-toolchain-precise-3.8
|
|
||||||
#
|
|
||||||
# - os: linux
|
|
||||||
# compiler: clang++-3.8
|
|
||||||
# env: TOOLSET=clang COMPILER=clang++-3.8 CXXSTD=c++1z
|
|
||||||
# addons:
|
|
||||||
# apt:
|
|
||||||
# packages:
|
|
||||||
# - clang-3.8
|
|
||||||
# sources:
|
|
||||||
# - ubuntu-toolchain-r-test
|
|
||||||
# - llvm-toolchain-precise-3.8
|
|
||||||
#
|
|
||||||
# - os: linux
|
|
||||||
# compiler: clang++-3.9
|
|
||||||
# env: TOOLSET=clang COMPILER=clang++-3.9 CXXSTD=c++11
|
|
||||||
# addons:
|
|
||||||
# apt:
|
|
||||||
# packages:
|
|
||||||
# - clang-3.9
|
|
||||||
# sources:
|
|
||||||
# - ubuntu-toolchain-r-test
|
|
||||||
# - llvm-toolchain-precise-3.9
|
|
||||||
#
|
|
||||||
# - os: linux
|
|
||||||
# compiler: clang++-3.9
|
|
||||||
# env: TOOLSET=clang COMPILER=clang++-3.9 CXXSTD=c++14
|
|
||||||
# addons:
|
|
||||||
# apt:
|
|
||||||
# packages:
|
|
||||||
# - clang-3.9
|
|
||||||
# sources:
|
|
||||||
# - ubuntu-toolchain-r-test
|
|
||||||
# - llvm-toolchain-precise-3.9
|
|
||||||
#
|
|
||||||
# - os: linux
|
|
||||||
# compiler: clang++-3.9
|
|
||||||
# env: TOOLSET=clang COMPILER=clang++-3.9 CXXSTD=c++1z
|
|
||||||
# addons:
|
|
||||||
# apt:
|
|
||||||
# packages:
|
|
||||||
# - clang-3.9
|
|
||||||
# sources:
|
|
||||||
# - ubuntu-toolchain-r-test
|
|
||||||
# - llvm-toolchain-precise-3.9
|
|
||||||
#
|
|
||||||
- os: linux
|
- os: linux
|
||||||
compiler: clang++-4.0
|
compiler: clang++-4.0
|
||||||
env: TOOLSET=clang COMPILER=clang++-4.0 CXXSTD=c++98
|
env: TOOLSET=clang CXXSTD=03,11,14,1z HEADERS_ONLY=1
|
||||||
addons:
|
addons:
|
||||||
apt:
|
apt:
|
||||||
packages:
|
packages:
|
||||||
- clang-4.0
|
- clang-4.0
|
||||||
sources:
|
sources:
|
||||||
- ubuntu-toolchain-r-test
|
- ubuntu-toolchain-r-test
|
||||||
- llvm-toolchain-trusty-4.0
|
|
||||||
|
|
||||||
- os: linux
|
- os: linux
|
||||||
compiler: clang++-4.0
|
compiler: clang++-5.0
|
||||||
env: TOOLSET=clang COMPILER=clang++-4.0 CXXSTD=c++11
|
env: TOOLSET=clang CXXSTD=03,11,14,1z HEADERS_ONLY=1
|
||||||
addons:
|
addons:
|
||||||
apt:
|
apt:
|
||||||
packages:
|
packages:
|
||||||
- clang-4.0
|
- clang-5.0
|
||||||
sources:
|
sources:
|
||||||
- ubuntu-toolchain-r-test
|
- ubuntu-toolchain-r-test
|
||||||
- llvm-toolchain-trusty-4.0
|
|
||||||
|
|
||||||
- os: linux
|
- os: linux
|
||||||
compiler: clang++-4.0
|
compiler: clang++-6.0
|
||||||
env: TOOLSET=clang COMPILER=clang++-4.0 CXXSTD=c++14
|
env: TOOLSET=clang CXXSTD=14,17 HEADERS_ONLY=1
|
||||||
addons:
|
addons:
|
||||||
apt:
|
apt:
|
||||||
packages:
|
packages:
|
||||||
- clang-4.0
|
- clang-6.0
|
||||||
sources:
|
sources:
|
||||||
- ubuntu-toolchain-r-test
|
- ubuntu-toolchain-r-test
|
||||||
- llvm-toolchain-trusty-4.0
|
|
||||||
|
|
||||||
- os: linux
|
- os: linux
|
||||||
compiler: clang++-4.0
|
compiler: clang++-7
|
||||||
env: TOOLSET=clang COMPILER=clang++-4.0 CXXSTD=c++1z
|
env: TOOLSET=clang CXXSTD=14,17,2a HEADERS_ONLY=1
|
||||||
addons:
|
addons:
|
||||||
apt:
|
apt:
|
||||||
packages:
|
packages:
|
||||||
- clang-4.0
|
- clang-7
|
||||||
sources:
|
sources:
|
||||||
- ubuntu-toolchain-r-test
|
- ubuntu-toolchain-r-test
|
||||||
- llvm-toolchain-trusty-4.0
|
- llvm-toolchain-xenial-7
|
||||||
|
|
||||||
|
- os: linux
|
||||||
|
compiler: clang++-8
|
||||||
|
env: TOOLSET=clang CXXSTD=14,17,2a HEADERS_ONLY=1
|
||||||
|
addons:
|
||||||
|
apt:
|
||||||
|
packages:
|
||||||
|
- clang-8
|
||||||
|
sources:
|
||||||
|
- ubuntu-toolchain-r-test
|
||||||
|
- llvm-toolchain-xenial-8
|
||||||
|
|
||||||
|
- os: linux
|
||||||
|
compiler: clang++-9
|
||||||
|
env: TOOLSET=clang CXXSTD=14
|
||||||
|
addons:
|
||||||
|
apt:
|
||||||
|
packages:
|
||||||
|
- clang-9
|
||||||
|
sources:
|
||||||
|
- ubuntu-toolchain-r-test
|
||||||
|
- sourceline: 'deb https://apt.llvm.org/xenial/ llvm-toolchain-xenial-9 main'
|
||||||
|
key_url: 'https://apt.llvm.org/llvm-snapshot.gpg.key'
|
||||||
|
|
||||||
|
- os: linux
|
||||||
|
compiler: clang++-9
|
||||||
|
env: TOOLSET=clang CXXSTD=17
|
||||||
|
addons:
|
||||||
|
apt:
|
||||||
|
packages:
|
||||||
|
- clang-9
|
||||||
|
sources:
|
||||||
|
- ubuntu-toolchain-r-test
|
||||||
|
- sourceline: 'deb https://apt.llvm.org/xenial/ llvm-toolchain-xenial-9 main'
|
||||||
|
key_url: 'https://apt.llvm.org/llvm-snapshot.gpg.key'
|
||||||
|
|
||||||
- os: osx
|
- os: osx
|
||||||
compiler: clang++
|
compiler: clang++
|
||||||
env: TOOLSET=clang COMPILER=clang++ CXXSTD=c++98 SELF_CONTAINED_HEADER_TESTS=1
|
env: TOOLSET=clang CXXSTD=98
|
||||||
|
|
||||||
# - os: osx
|
# - os: osx
|
||||||
# compiler: clang++
|
# compiler: clang++
|
||||||
# env: TOOLSET=clang COMPILER=clang++ CXXSTD=c++11
|
# env: TOOLSET=clang CXXSTD=11
|
||||||
|
|
||||||
# - os: osx
|
# - os: osx
|
||||||
# compiler: clang++
|
# compiler: clang++
|
||||||
# env: TOOLSET=clang COMPILER=clang++ CXXSTD=c++14
|
# env: TOOLSET=clang CXXSTD=14
|
||||||
|
|
||||||
- os: osx
|
- os: osx
|
||||||
compiler: clang++
|
compiler: clang++
|
||||||
env: TOOLSET=clang COMPILER=clang++ CXXSTD=c++1z
|
env: TOOLSET=clang CXXSTD=1z
|
||||||
|
|
||||||
install:
|
install:
|
||||||
- GIT_FETCH_JOBS=8
|
- GIT_FETCH_JOBS=8
|
||||||
@@ -364,10 +304,8 @@ install:
|
|||||||
|
|
||||||
script:
|
script:
|
||||||
- |-
|
- |-
|
||||||
echo "using $TOOLSET : : $COMPILER : <cxxflags>-std=$CXXSTD ;" > ~/user-config.jam
|
echo "using $TOOLSET : : $TRAVIS_COMPILER ;" > ~/user-config.jam
|
||||||
- BUILD_JOBS=`(nproc || sysctl -n hw.ncpu) 2> /dev/null`
|
- ./b2 -j3 -l60 libs/thread/test${HEADERS_ONLY:+//test_self_contained_headers} toolset=$TOOLSET cxxstd=$CXXSTD
|
||||||
- if [ -z "$SELF_CONTAINED_HEADER_TESTS" ]; then export BOOST_THREAD_TEST_WITHOUT_SELF_CONTAINED_HEADER_TESTS=1; fi
|
|
||||||
- ./b2 -j $BUILD_JOBS -l60 libs/thread/test toolset=$TOOLSET
|
|
||||||
|
|
||||||
notifications:
|
notifications:
|
||||||
email:
|
email:
|
||||||
|
|||||||
74
appveyor.yml
74
appveyor.yml
@@ -13,39 +13,55 @@ branches:
|
|||||||
- develop
|
- develop
|
||||||
- /feature\/.*/
|
- /feature\/.*/
|
||||||
|
|
||||||
|
image: Visual Studio 2015
|
||||||
|
|
||||||
environment:
|
environment:
|
||||||
matrix:
|
matrix:
|
||||||
- APPVEYOR_BUILD_WORKER_IMAGE: Visual Studio 2015
|
|
||||||
# TOOLSET: msvc-9.0,msvc-10.0,msvc-11.0,msvc-12.0
|
- TOOLSET: msvc-12.0
|
||||||
TOOLSET: msvc-12.0
|
VARIANT: release
|
||||||
SELF_CONTAINED_HEADER_TESTS: 1
|
|
||||||
- APPVEYOR_BUILD_WORKER_IMAGE: Visual Studio 2015
|
- TOOLSET: msvc-14.0
|
||||||
TOOLSET: msvc-14.0
|
|
||||||
ADDRMD: 32
|
ADDRMD: 32
|
||||||
- APPVEYOR_BUILD_WORKER_IMAGE: Visual Studio 2017
|
VARIANT: debug
|
||||||
TOOLSET: msvc-14.1
|
|
||||||
CXXSTD: 17
|
- TOOLSET: msvc-14.1
|
||||||
ADDRMD: 64
|
ADDRMD: 64
|
||||||
- APPVEYOR_BUILD_WORKER_IMAGE: Visual Studio 2015
|
VARIANT: release
|
||||||
ADDPATH: C:\cygwin\bin;
|
APPVEYOR_BUILD_WORKER_IMAGE: Visual Studio 2017
|
||||||
|
|
||||||
|
- TOOLSET: msvc-14.2
|
||||||
|
CXXSTD: 17
|
||||||
|
ADDRMD: 32
|
||||||
|
VARIANT: debug
|
||||||
|
APPVEYOR_BUILD_WORKER_IMAGE: Visual Studio 2019
|
||||||
|
|
||||||
|
- TOOLSET: msvc-14.2
|
||||||
|
ADDRMD: 64
|
||||||
|
VARIANT: release
|
||||||
|
APPVEYOR_BUILD_WORKER_IMAGE: Visual Studio 2019
|
||||||
|
|
||||||
|
- ADDPATH: C:\cygwin\bin;
|
||||||
TOOLSET: gcc
|
TOOLSET: gcc
|
||||||
CXXSTD: 14
|
VARIANT: release
|
||||||
SELF_CONTAINED_HEADER_TESTS: 1
|
|
||||||
- APPVEYOR_BUILD_WORKER_IMAGE: Visual Studio 2015
|
- ADDPATH: C:\mingw\bin;
|
||||||
ADDPATH: C:\cygwin64\bin;
|
|
||||||
TOOLSET: gcc
|
TOOLSET: gcc
|
||||||
CXXSTD: 14
|
VARIANT: debug
|
||||||
SELF_CONTAINED_HEADER_TESTS: 1
|
|
||||||
- APPVEYOR_BUILD_WORKER_IMAGE: Visual Studio 2015
|
# The following configurations fail with
|
||||||
ADDPATH: C:\mingw\bin;
|
# ./boost/thread/detail/invoke.hpp:101:43: internal compiler error: in gimplify_expr, at gimplify.c:12039
|
||||||
TOOLSET: gcc
|
# https://sourceforge.net/p/mingw-w64/bugs/694/
|
||||||
CXXSTD: 14
|
#
|
||||||
SELF_CONTAINED_HEADER_TESTS: 1
|
# - ADDPATH: C:\cygwin64\bin;
|
||||||
- APPVEYOR_BUILD_WORKER_IMAGE: Visual Studio 2015
|
# TOOLSET: gcc
|
||||||
ADDPATH: C:\mingw-w64\x86_64-6.3.0-posix-seh-rt_v5-rev1\mingw64\bin;
|
# VARIANT: debug
|
||||||
TOOLSET: gcc
|
# - ADDPATH: C:\mingw-w64\x86_64-6.3.0-posix-seh-rt_v5-rev1\mingw64\bin;
|
||||||
CXXSTD: 14
|
# TOOLSET: gcc
|
||||||
SELF_CONTAINED_HEADER_TESTS: 1
|
# VARIANT: debug
|
||||||
|
# - ADDPATH: C:\mingw-w64\x86_64-8.1.0-posix-seh-rt_v6-rev0\mingw64\bin;
|
||||||
|
# TOOLSET: gcc
|
||||||
|
# VARIANT: debug,release
|
||||||
|
|
||||||
install:
|
install:
|
||||||
- set GIT_FETCH_JOBS=8
|
- set GIT_FETCH_JOBS=8
|
||||||
@@ -67,7 +83,7 @@ build: off
|
|||||||
|
|
||||||
test_script:
|
test_script:
|
||||||
- PATH=%ADDPATH%%PATH%
|
- PATH=%ADDPATH%%PATH%
|
||||||
- if "%SELF_CONTAINED_HEADER_TESTS%" == "" set BOOST_THREAD_TEST_WITHOUT_SELF_CONTAINED_HEADER_TESTS=1
|
|
||||||
- if not "%CXXSTD%" == "" set CXXSTD=cxxstd=%CXXSTD%
|
- if not "%CXXSTD%" == "" set CXXSTD=cxxstd=%CXXSTD%
|
||||||
- if not "%ADDRMD%" == "" set ADDRMD=address-model=%ADDRMD%
|
- if not "%ADDRMD%" == "" set ADDRMD=address-model=%ADDRMD%
|
||||||
- b2 -j %NUMBER_OF_PROCESSORS% --abbreviate-paths libs/thread/test toolset=%TOOLSET% %CXXSTD% %ADDRMD% variant=debug,release
|
- if not "%VARIANT%" == "" set VARIANT=variant=%VARIANT%
|
||||||
|
- b2 -j2 --abbreviate-paths libs/thread/test toolset=%TOOLSET% %CXXSTD% %ADDRMD% %VARIANT%
|
||||||
|
|||||||
@@ -20,6 +20,7 @@ struct func
|
|||||||
int& i;
|
int& i;
|
||||||
|
|
||||||
func(int& i_):i(i_){}
|
func(int& i_):i(i_){}
|
||||||
|
func(func const& other):i(other.i){}
|
||||||
|
|
||||||
void operator()()
|
void operator()()
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -148,7 +148,7 @@ namespace detail
|
|||||||
template <class Q, class T,
|
template <class Q, class T,
|
||||||
#if ! defined BOOST_NO_CXX11_RVALUE_REFERENCES
|
#if ! defined BOOST_NO_CXX11_RVALUE_REFERENCES
|
||||||
#if defined __GNUC__ && ! defined __clang__
|
#if defined __GNUC__ && ! defined __clang__
|
||||||
#if __GNUC__ < 4 || (__GNUC__ == 4 && __GNUC_MINOR__ < 5) || !defined(__GXX_EXPERIMENTAL_CXX0X__)
|
#if __GNUC__ < 4 || (__GNUC__ == 4 && __GNUC_MINOR__ < 7) || !defined(__GXX_EXPERIMENTAL_CXX0X__)
|
||||||
bool Copyable = is_copy_constructible<T>::value,
|
bool Copyable = is_copy_constructible<T>::value,
|
||||||
bool Movable = true
|
bool Movable = true
|
||||||
#else
|
#else
|
||||||
|
|||||||
@@ -140,7 +140,7 @@ namespace detail
|
|||||||
template <class T, class ST,
|
template <class T, class ST,
|
||||||
#if ! defined BOOST_NO_CXX11_RVALUE_REFERENCES
|
#if ! defined BOOST_NO_CXX11_RVALUE_REFERENCES
|
||||||
#if defined __GNUC__ && ! defined __clang__
|
#if defined __GNUC__ && ! defined __clang__
|
||||||
#if __GNUC__ < 4 || (__GNUC__ == 4 && __GNUC_MINOR__ < 5) || !defined(__GXX_EXPERIMENTAL_CXX0X__)
|
#if __GNUC__ < 4 || (__GNUC__ == 4 && __GNUC_MINOR__ < 7) || !defined(__GXX_EXPERIMENTAL_CXX0X__)
|
||||||
bool Copyable = is_copy_constructible<T>::value,
|
bool Copyable = is_copy_constructible<T>::value,
|
||||||
bool Movable = true
|
bool Movable = true
|
||||||
#else
|
#else
|
||||||
|
|||||||
@@ -148,7 +148,7 @@ namespace detail
|
|||||||
template <class Q, class T,
|
template <class Q, class T,
|
||||||
#if ! defined BOOST_NO_CXX11_RVALUE_REFERENCES
|
#if ! defined BOOST_NO_CXX11_RVALUE_REFERENCES
|
||||||
#if defined __GNUC__ && ! defined __clang__
|
#if defined __GNUC__ && ! defined __clang__
|
||||||
#if __GNUC__ < 4 || (__GNUC__ == 4 && __GNUC_MINOR__ < 5) || !defined(__GXX_EXPERIMENTAL_CXX0X__)
|
#if __GNUC__ < 4 || (__GNUC__ == 4 && __GNUC_MINOR__ < 7) || !defined(__GXX_EXPERIMENTAL_CXX0X__)
|
||||||
bool Copyable = is_copy_constructible<T>::value,
|
bool Copyable = is_copy_constructible<T>::value,
|
||||||
bool Movable = true
|
bool Movable = true
|
||||||
#else
|
#else
|
||||||
|
|||||||
@@ -140,7 +140,7 @@ namespace detail
|
|||||||
template <class T, class ST,
|
template <class T, class ST,
|
||||||
#if ! defined BOOST_NO_CXX11_RVALUE_REFERENCES
|
#if ! defined BOOST_NO_CXX11_RVALUE_REFERENCES
|
||||||
#if defined __GNUC__ && ! defined __clang__
|
#if defined __GNUC__ && ! defined __clang__
|
||||||
#if __GNUC__ < 4 || (__GNUC__ == 4 && __GNUC_MINOR__ < 5) || !defined(__GXX_EXPERIMENTAL_CXX0X__)
|
#if __GNUC__ < 4 || (__GNUC__ == 4 && __GNUC_MINOR__ < 7) || !defined(__GXX_EXPERIMENTAL_CXX0X__)
|
||||||
bool Copyable = is_copy_constructible<T>::value,
|
bool Copyable = is_copy_constructible<T>::value,
|
||||||
bool Movable = true
|
bool Movable = true
|
||||||
#else
|
#else
|
||||||
|
|||||||
@@ -405,7 +405,7 @@
|
|||||||
#define BOOST_THREAD_FUTURE_USES_OPTIONAL
|
#define BOOST_THREAD_FUTURE_USES_OPTIONAL
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#if BOOST_WORKAROUND(__BORLANDC__, < 0x600)
|
#if BOOST_WORKAROUND(BOOST_BORLANDC, < 0x600)
|
||||||
# pragma warn -8008 // Condition always true/false
|
# pragma warn -8008 // Condition always true/false
|
||||||
# pragma warn -8080 // Identifier declared but never used
|
# pragma warn -8080 // Identifier declared but never used
|
||||||
# pragma warn -8057 // Parameter never used
|
# pragma warn -8057 // Parameter never used
|
||||||
|
|||||||
@@ -601,6 +601,9 @@ namespace boost
|
|||||||
class BOOST_SYMBOL_VISIBLE thread::id
|
class BOOST_SYMBOL_VISIBLE thread::id
|
||||||
{
|
{
|
||||||
private:
|
private:
|
||||||
|
|
||||||
|
#if !defined(BOOST_EMBTC)
|
||||||
|
|
||||||
friend inline
|
friend inline
|
||||||
std::size_t
|
std::size_t
|
||||||
hash_value(const thread::id &v)
|
hash_value(const thread::id &v)
|
||||||
@@ -612,6 +615,14 @@ namespace boost
|
|||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#else
|
||||||
|
|
||||||
|
friend
|
||||||
|
std::size_t
|
||||||
|
hash_value(const thread::id &v);
|
||||||
|
|
||||||
|
#endif
|
||||||
|
|
||||||
#if defined BOOST_THREAD_PROVIDES_BASIC_THREAD_ID
|
#if defined BOOST_THREAD_PROVIDES_BASIC_THREAD_ID
|
||||||
#if defined(BOOST_THREAD_PLATFORM_WIN32)
|
#if defined(BOOST_THREAD_PLATFORM_WIN32)
|
||||||
typedef unsigned int data;
|
typedef unsigned int data;
|
||||||
@@ -637,10 +648,6 @@ namespace boost
|
|||||||
#endif
|
#endif
|
||||||
{}
|
{}
|
||||||
|
|
||||||
id(const id& other) BOOST_NOEXCEPT :
|
|
||||||
thread_data(other.thread_data)
|
|
||||||
{}
|
|
||||||
|
|
||||||
bool operator==(const id& y) const BOOST_NOEXCEPT
|
bool operator==(const id& y) const BOOST_NOEXCEPT
|
||||||
{
|
{
|
||||||
return thread_data==y.thread_data;
|
return thread_data==y.thread_data;
|
||||||
@@ -709,6 +716,21 @@ namespace boost
|
|||||||
#endif
|
#endif
|
||||||
};
|
};
|
||||||
|
|
||||||
|
#if defined(BOOST_EMBTC)
|
||||||
|
|
||||||
|
inline
|
||||||
|
std::size_t
|
||||||
|
hash_value(const thread::id &v)
|
||||||
|
{
|
||||||
|
#if defined BOOST_THREAD_PROVIDES_BASIC_THREAD_ID
|
||||||
|
return hash_value(v.thread_data);
|
||||||
|
#else
|
||||||
|
return hash_value(v.thread_data.get());
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
|
||||||
|
#endif
|
||||||
|
|
||||||
#ifdef BOOST_THREAD_PLATFORM_PTHREAD
|
#ifdef BOOST_THREAD_PLATFORM_PTHREAD
|
||||||
inline thread::id thread::get_id() const BOOST_NOEXCEPT
|
inline thread::id thread::get_id() const BOOST_NOEXCEPT
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -145,6 +145,8 @@ namespace boost
|
|||||||
{}
|
{}
|
||||||
virtual ~thread_data_base();
|
virtual ~thread_data_base();
|
||||||
|
|
||||||
|
#if !defined(BOOST_EMBTC)
|
||||||
|
|
||||||
friend void intrusive_ptr_add_ref(thread_data_base * p)
|
friend void intrusive_ptr_add_ref(thread_data_base * p)
|
||||||
{
|
{
|
||||||
BOOST_INTERLOCKED_INCREMENT(&p->count);
|
BOOST_INTERLOCKED_INCREMENT(&p->count);
|
||||||
@@ -158,6 +160,13 @@ namespace boost
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#else
|
||||||
|
|
||||||
|
friend void intrusive_ptr_add_ref(thread_data_base * p);
|
||||||
|
friend void intrusive_ptr_release(thread_data_base * p);
|
||||||
|
|
||||||
|
#endif
|
||||||
|
|
||||||
#if defined BOOST_THREAD_PROVIDES_INTERRUPTIONS
|
#if defined BOOST_THREAD_PROVIDES_INTERRUPTIONS
|
||||||
void interrupt()
|
void interrupt()
|
||||||
{
|
{
|
||||||
@@ -180,6 +189,24 @@ namespace boost
|
|||||||
}
|
}
|
||||||
//#endif
|
//#endif
|
||||||
};
|
};
|
||||||
|
|
||||||
|
#if defined(BOOST_EMBTC)
|
||||||
|
|
||||||
|
inline void intrusive_ptr_add_ref(thread_data_base * p)
|
||||||
|
{
|
||||||
|
BOOST_INTERLOCKED_INCREMENT(&p->count);
|
||||||
|
}
|
||||||
|
|
||||||
|
inline void intrusive_ptr_release(thread_data_base * p)
|
||||||
|
{
|
||||||
|
if(!BOOST_INTERLOCKED_DECREMENT(&p->count))
|
||||||
|
{
|
||||||
|
detail::heap_delete(p);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
#endif
|
||||||
|
|
||||||
BOOST_THREAD_DECL thread_data_base* get_current_thread_data();
|
BOOST_THREAD_DECL thread_data_base* get_current_thread_data();
|
||||||
|
|
||||||
typedef boost::intrusive_ptr<detail::thread_data_base> thread_data_ptr;
|
typedef boost::intrusive_ptr<detail::thread_data_base> thread_data_ptr;
|
||||||
|
|||||||
@@ -13,8 +13,10 @@
|
|||||||
|
|
||||||
#include <windows.h>
|
#include <windows.h>
|
||||||
|
|
||||||
#if defined(__BORLANDC__)
|
#if defined(BOOST_BORLANDC)
|
||||||
extern "C" BOOL WINAPI DllEntryPoint(HINSTANCE /*hInstance*/, DWORD dwReason, LPVOID /*lpReserved*/)
|
extern "C" BOOL WINAPI DllEntryPoint(HINSTANCE /*hInstance*/, DWORD dwReason, LPVOID /*lpReserved*/)
|
||||||
|
#elif defined(BOOST_EMBTC)
|
||||||
|
extern "C" int _libmain(DWORD dwReason)
|
||||||
#elif defined(_WIN32_WCE)
|
#elif defined(_WIN32_WCE)
|
||||||
extern "C" BOOL WINAPI DllMain(HANDLE /*hInstance*/, DWORD dwReason, LPVOID /*lpReserved*/)
|
extern "C" BOOL WINAPI DllMain(HANDLE /*hInstance*/, DWORD dwReason, LPVOID /*lpReserved*/)
|
||||||
#else
|
#else
|
||||||
|
|||||||
@@ -152,19 +152,25 @@ extern BOOL (WINAPI * const _pDefaultRawDllMainOrig)(HINSTANCE, DWORD, LPVOID) =
|
|||||||
static PVAPI_V on_process_init();
|
static PVAPI_V on_process_init();
|
||||||
static PVAPI_V on_process_term();
|
static PVAPI_V on_process_term();
|
||||||
static void NTAPI on_tls_callback(HINSTANCE, DWORD, PVOID);
|
static void NTAPI on_tls_callback(HINSTANCE, DWORD, PVOID);
|
||||||
|
}
|
||||||
|
|
||||||
|
namespace boost
|
||||||
|
{
|
||||||
//The .CRT$Xxx information is taken from Codeguru:
|
//The .CRT$Xxx information is taken from Codeguru:
|
||||||
//http://www.codeguru.com/Cpp/misc/misc/threadsprocesses/article.php/c6945__2/
|
//http://www.codeguru.com/Cpp/misc/misc/threadsprocesses/article.php/c6945__2/
|
||||||
|
|
||||||
|
// Variables below are not referenced anywhere and
|
||||||
|
// to not be optimized away has to have external linkage
|
||||||
|
|
||||||
#if (_MSC_VER >= 1400)
|
#if (_MSC_VER >= 1400)
|
||||||
#pragma section(".CRT$XIU",long,read)
|
#pragma section(".CRT$XIU",long,read)
|
||||||
#pragma section(".CRT$XCU",long,read)
|
#pragma section(".CRT$XCU",long,read)
|
||||||
#pragma section(".CRT$XTU",long,read)
|
#pragma section(".CRT$XTU",long,read)
|
||||||
#pragma section(".CRT$XLC",long,read)
|
#pragma section(".CRT$XLC",long,read)
|
||||||
__declspec(allocate(".CRT$XLC")) _TLSCB __xl_ca=on_tls_callback;
|
extern const __declspec(allocate(".CRT$XLC")) _TLSCB p_tls_callback = on_tls_callback;
|
||||||
__declspec(allocate(".CRT$XIU"))_PIFV_ p_tls_prepare = on_tls_prepare;
|
extern const __declspec(allocate(".CRT$XIU")) _PIFV_ p_tls_prepare = on_tls_prepare;
|
||||||
__declspec(allocate(".CRT$XCU"))_PVFV_ p_process_init = on_process_init;
|
extern const __declspec(allocate(".CRT$XCU")) _PVFV_ p_process_init = on_process_init;
|
||||||
__declspec(allocate(".CRT$XTU"))_PVFV_ p_process_term = on_process_term;
|
extern const __declspec(allocate(".CRT$XTU")) _PVFV_ p_process_term = on_process_term;
|
||||||
#else
|
#else
|
||||||
#if (_MSC_VER >= 1300) // 1300 == VC++ 7.0
|
#if (_MSC_VER >= 1300) // 1300 == VC++ 7.0
|
||||||
# pragma data_seg(push, old_seg)
|
# pragma data_seg(push, old_seg)
|
||||||
@@ -176,30 +182,33 @@ extern BOOL (WINAPI * const _pDefaultRawDllMainOrig)(HINSTANCE, DWORD, LPVOID) =
|
|||||||
//this could be changed easily if required.
|
//this could be changed easily if required.
|
||||||
|
|
||||||
#pragma data_seg(".CRT$XIU")
|
#pragma data_seg(".CRT$XIU")
|
||||||
static _PIFV_ p_tls_prepare = on_tls_prepare;
|
extern const _PIFV_ p_tls_prepare = on_tls_prepare;
|
||||||
#pragma data_seg()
|
#pragma data_seg()
|
||||||
|
|
||||||
//Callback after all global ctors.
|
//Callback after all global ctors.
|
||||||
|
|
||||||
#pragma data_seg(".CRT$XCU")
|
#pragma data_seg(".CRT$XCU")
|
||||||
static _PVFV_ p_process_init = on_process_init;
|
extern const _PVFV_ p_process_init = on_process_init;
|
||||||
#pragma data_seg()
|
#pragma data_seg()
|
||||||
|
|
||||||
//Callback for tls notifications.
|
//Callback for tls notifications.
|
||||||
|
|
||||||
#pragma data_seg(".CRT$XLB")
|
#pragma data_seg(".CRT$XLB")
|
||||||
_TLSCB p_thread_callback = on_tls_callback;
|
extern const _TLSCB p_thread_callback = on_tls_callback;
|
||||||
#pragma data_seg()
|
#pragma data_seg()
|
||||||
//Callback for termination.
|
//Callback for termination.
|
||||||
|
|
||||||
#pragma data_seg(".CRT$XTU")
|
#pragma data_seg(".CRT$XTU")
|
||||||
static _PVFV_ p_process_term = on_process_term;
|
extern const _PVFV_ p_process_term = on_process_term;
|
||||||
#pragma data_seg()
|
#pragma data_seg()
|
||||||
#if (_MSC_VER >= 1300) // 1300 == VC++ 7.0
|
#if (_MSC_VER >= 1300) // 1300 == VC++ 7.0
|
||||||
# pragma data_seg(pop, old_seg)
|
# pragma data_seg(pop, old_seg)
|
||||||
#endif
|
#endif
|
||||||
#endif
|
#endif
|
||||||
|
} // namespace boost
|
||||||
|
|
||||||
|
namespace
|
||||||
|
{
|
||||||
#ifdef BOOST_MSVC
|
#ifdef BOOST_MSVC
|
||||||
#pragma warning(push)
|
#pragma warning(push)
|
||||||
#pragma warning(disable:4189)
|
#pragma warning(disable:4189)
|
||||||
|
|||||||
@@ -7,6 +7,7 @@
|
|||||||
// accompanying file LICENSE_1_0.txt or copy at
|
// accompanying file LICENSE_1_0.txt or copy at
|
||||||
// http://www.boost.org/LICENSE_1_0.txt)
|
// http://www.boost.org/LICENSE_1_0.txt)
|
||||||
|
|
||||||
|
#include <boost/config.hpp>
|
||||||
#include <boost/thread/mutex.hpp>
|
#include <boost/thread/mutex.hpp>
|
||||||
#include <boost/thread/condition_variable.hpp>
|
#include <boost/thread/condition_variable.hpp>
|
||||||
#include <boost/thread/shared_mutex.hpp>
|
#include <boost/thread/shared_mutex.hpp>
|
||||||
@@ -38,6 +39,10 @@ public:
|
|||||||
finish_mutex(finish_mutex_)
|
finish_mutex(finish_mutex_)
|
||||||
{}
|
{}
|
||||||
|
|
||||||
|
#if !defined(BOOST_NO_CXX11_DEFAULTED_FUNCTIONS)
|
||||||
|
locking_thread(locking_thread const&) = default;
|
||||||
|
#endif
|
||||||
|
|
||||||
void operator()()
|
void operator()()
|
||||||
{
|
{
|
||||||
// acquire lock
|
// acquire lock
|
||||||
@@ -84,6 +89,10 @@ public:
|
|||||||
unblocked_mutex(unblocked_mutex_),unblocked_count(unblocked_count_)
|
unblocked_mutex(unblocked_mutex_),unblocked_count(unblocked_count_)
|
||||||
{}
|
{}
|
||||||
|
|
||||||
|
#if !defined(BOOST_NO_CXX11_DEFAULTED_FUNCTIONS)
|
||||||
|
simple_writing_thread(simple_writing_thread const&) = default;
|
||||||
|
#endif
|
||||||
|
|
||||||
void operator()()
|
void operator()()
|
||||||
{
|
{
|
||||||
boost::unique_lock<boost::shared_mutex> lk(rwm);
|
boost::unique_lock<boost::shared_mutex> lk(rwm);
|
||||||
@@ -115,6 +124,10 @@ public:
|
|||||||
unblocked_mutex(unblocked_mutex_),unblocked_count(unblocked_count_)
|
unblocked_mutex(unblocked_mutex_),unblocked_count(unblocked_count_)
|
||||||
{}
|
{}
|
||||||
|
|
||||||
|
#if !defined(BOOST_NO_CXX11_DEFAULTED_FUNCTIONS)
|
||||||
|
simple_reading_thread(simple_reading_thread const&) = default;
|
||||||
|
#endif
|
||||||
|
|
||||||
void operator()()
|
void operator()()
|
||||||
{
|
{
|
||||||
boost::shared_lock<boost::shared_mutex> lk(rwm);
|
boost::shared_lock<boost::shared_mutex> lk(rwm);
|
||||||
|
|||||||
@@ -26,8 +26,6 @@
|
|||||||
#pragma warning(disable: 4127) // conditional expression is constant
|
#pragma warning(disable: 4127) // conditional expression is constant
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
namespace boost
|
|
||||||
{
|
|
||||||
template <typename T>
|
template <typename T>
|
||||||
struct wrap
|
struct wrap
|
||||||
{
|
{
|
||||||
@@ -37,9 +35,8 @@ struct wrap
|
|||||||
};
|
};
|
||||||
|
|
||||||
template <typename T>
|
template <typename T>
|
||||||
exception_ptr make_exception_ptr(T v) {
|
boost::exception_ptr make_exception_ptr(T v) {
|
||||||
return copy_exception(wrap<T>(v));
|
return boost::copy_exception(wrap<T>(v));
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void func1(boost::promise<int> p)
|
void func1(boost::promise<int> p)
|
||||||
@@ -51,7 +48,7 @@ void func1(boost::promise<int> p)
|
|||||||
void func2(boost::promise<int> p)
|
void func2(boost::promise<int> p)
|
||||||
{
|
{
|
||||||
boost::this_thread::sleep_for(boost::chrono::milliseconds(500));
|
boost::this_thread::sleep_for(boost::chrono::milliseconds(500));
|
||||||
p.set_exception(boost::make_exception_ptr(3));
|
p.set_exception(::make_exception_ptr(3));
|
||||||
}
|
}
|
||||||
|
|
||||||
int j = 0;
|
int j = 0;
|
||||||
@@ -66,7 +63,7 @@ void func3(boost::promise<int&> p)
|
|||||||
void func4(boost::promise<int&> p)
|
void func4(boost::promise<int&> p)
|
||||||
{
|
{
|
||||||
boost::this_thread::sleep_for(boost::chrono::milliseconds(500));
|
boost::this_thread::sleep_for(boost::chrono::milliseconds(500));
|
||||||
p.set_exception(boost::make_exception_ptr(3.5));
|
p.set_exception(::make_exception_ptr(3.5));
|
||||||
}
|
}
|
||||||
|
|
||||||
void func5(boost::promise<void> p)
|
void func5(boost::promise<void> p)
|
||||||
@@ -78,7 +75,7 @@ void func5(boost::promise<void> p)
|
|||||||
void func6(boost::promise<void> p)
|
void func6(boost::promise<void> p)
|
||||||
{
|
{
|
||||||
boost::this_thread::sleep_for(boost::chrono::milliseconds(500));
|
boost::this_thread::sleep_for(boost::chrono::milliseconds(500));
|
||||||
p.set_exception(boost::make_exception_ptr(4));
|
p.set_exception(::make_exception_ptr(4));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@@ -110,7 +107,7 @@ int main()
|
|||||||
#if defined BOOST_THREAD_PROVIDES_SIGNATURE_PACKAGED_TASK && defined(BOOST_THREAD_PROVIDES_VARIADIC_THREAD)
|
#if defined BOOST_THREAD_PROVIDES_SIGNATURE_PACKAGED_TASK && defined(BOOST_THREAD_PROVIDES_VARIADIC_THREAD)
|
||||||
boost::thread(func2, boost::move(p)).detach();
|
boost::thread(func2, boost::move(p)).detach();
|
||||||
#else
|
#else
|
||||||
p.set_exception(boost::make_exception_ptr(3));
|
p.set_exception(::make_exception_ptr(3));
|
||||||
#endif
|
#endif
|
||||||
BOOST_THREAD_LOG << BOOST_THREAD_END_LOG;
|
BOOST_THREAD_LOG << BOOST_THREAD_END_LOG;
|
||||||
try
|
try
|
||||||
@@ -159,7 +156,7 @@ int main()
|
|||||||
#if defined BOOST_THREAD_PROVIDES_SIGNATURE_PACKAGED_TASK && defined(BOOST_THREAD_PROVIDES_VARIADIC_THREAD)
|
#if defined BOOST_THREAD_PROVIDES_SIGNATURE_PACKAGED_TASK && defined(BOOST_THREAD_PROVIDES_VARIADIC_THREAD)
|
||||||
boost::thread(func4, boost::move(p)).detach();
|
boost::thread(func4, boost::move(p)).detach();
|
||||||
#else
|
#else
|
||||||
p.set_exception(boost::make_exception_ptr(3.5));
|
p.set_exception(::make_exception_ptr(3.5));
|
||||||
#endif
|
#endif
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -36,8 +36,6 @@
|
|||||||
#pragma warning(disable: 4127) // conditional expression is constant
|
#pragma warning(disable: 4127) // conditional expression is constant
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
namespace boost
|
|
||||||
{
|
|
||||||
template <typename T>
|
template <typename T>
|
||||||
struct wrap
|
struct wrap
|
||||||
{
|
{
|
||||||
@@ -47,9 +45,8 @@ struct wrap
|
|||||||
};
|
};
|
||||||
|
|
||||||
template <typename T>
|
template <typename T>
|
||||||
exception_ptr make_exception_ptr(T v) {
|
boost::exception_ptr make_exception_ptr(T v) {
|
||||||
return copy_exception(wrap<T>(v));
|
return boost::copy_exception(wrap<T>(v));
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void func1(boost::promise<int> p)
|
void func1(boost::promise<int> p)
|
||||||
@@ -61,7 +58,7 @@ void func1(boost::promise<int> p)
|
|||||||
void func2(boost::promise<int> p)
|
void func2(boost::promise<int> p)
|
||||||
{
|
{
|
||||||
boost::this_thread::sleep_for(boost::chrono::milliseconds(500));
|
boost::this_thread::sleep_for(boost::chrono::milliseconds(500));
|
||||||
p.set_exception(boost::make_exception_ptr(3));
|
p.set_exception(::make_exception_ptr(3));
|
||||||
}
|
}
|
||||||
|
|
||||||
int j = 0;
|
int j = 0;
|
||||||
@@ -76,7 +73,7 @@ void func3(boost::promise<int&> p)
|
|||||||
void func4(boost::promise<int&> p)
|
void func4(boost::promise<int&> p)
|
||||||
{
|
{
|
||||||
boost::this_thread::sleep_for(boost::chrono::milliseconds(500));
|
boost::this_thread::sleep_for(boost::chrono::milliseconds(500));
|
||||||
p.set_exception(boost::make_exception_ptr(3.5));
|
p.set_exception(::make_exception_ptr(3.5));
|
||||||
}
|
}
|
||||||
|
|
||||||
void func5(boost::promise<void> p)
|
void func5(boost::promise<void> p)
|
||||||
@@ -88,7 +85,7 @@ void func5(boost::promise<void> p)
|
|||||||
void func6(boost::promise<void> p)
|
void func6(boost::promise<void> p)
|
||||||
{
|
{
|
||||||
boost::this_thread::sleep_for(boost::chrono::milliseconds(500));
|
boost::this_thread::sleep_for(boost::chrono::milliseconds(500));
|
||||||
p.set_exception(boost::make_exception_ptr(4));
|
p.set_exception(::make_exception_ptr(4));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@@ -120,7 +117,7 @@ int main()
|
|||||||
#if defined BOOST_THREAD_PROVIDES_SIGNATURE_PACKAGED_TASK && defined(BOOST_THREAD_PROVIDES_VARIADIC_THREAD)
|
#if defined BOOST_THREAD_PROVIDES_SIGNATURE_PACKAGED_TASK && defined(BOOST_THREAD_PROVIDES_VARIADIC_THREAD)
|
||||||
boost::thread(func2, boost::move(p)).detach();
|
boost::thread(func2, boost::move(p)).detach();
|
||||||
#else
|
#else
|
||||||
p.set_exception(boost::make_exception_ptr(3));
|
p.set_exception(::make_exception_ptr(3));
|
||||||
#endif
|
#endif
|
||||||
BOOST_THREAD_LOG << BOOST_THREAD_END_LOG;
|
BOOST_THREAD_LOG << BOOST_THREAD_END_LOG;
|
||||||
try
|
try
|
||||||
@@ -133,7 +130,7 @@ int main()
|
|||||||
BOOST_TEST(false);
|
BOOST_TEST(false);
|
||||||
BOOST_THREAD_LOG << BOOST_THREAD_END_LOG;
|
BOOST_THREAD_LOG << BOOST_THREAD_END_LOG;
|
||||||
}
|
}
|
||||||
catch (boost::wrap<int> const& i)
|
catch (::wrap<int> const& i)
|
||||||
{
|
{
|
||||||
BOOST_THREAD_LOG << BOOST_THREAD_END_LOG;
|
BOOST_THREAD_LOG << BOOST_THREAD_END_LOG;
|
||||||
BOOST_TEST(i.value == 3);
|
BOOST_TEST(i.value == 3);
|
||||||
@@ -177,7 +174,7 @@ int main()
|
|||||||
#if defined BOOST_THREAD_PROVIDES_SIGNATURE_PACKAGED_TASK && defined(BOOST_THREAD_PROVIDES_VARIADIC_THREAD)
|
#if defined BOOST_THREAD_PROVIDES_SIGNATURE_PACKAGED_TASK && defined(BOOST_THREAD_PROVIDES_VARIADIC_THREAD)
|
||||||
boost::thread(func4, boost::move(p)).detach();
|
boost::thread(func4, boost::move(p)).detach();
|
||||||
#else
|
#else
|
||||||
p.set_exception(boost::make_exception_ptr(3.5));
|
p.set_exception(::make_exception_ptr(3.5));
|
||||||
#endif
|
#endif
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
@@ -185,7 +182,7 @@ int main()
|
|||||||
BOOST_TEST(f.get() == 3);
|
BOOST_TEST(f.get() == 3);
|
||||||
BOOST_TEST(false);
|
BOOST_TEST(false);
|
||||||
}
|
}
|
||||||
catch (boost::wrap<double> const& i)
|
catch (::wrap<double> const& i)
|
||||||
{
|
{
|
||||||
BOOST_TEST(i.value == 3.5);
|
BOOST_TEST(i.value == 3.5);
|
||||||
}
|
}
|
||||||
@@ -200,7 +197,7 @@ int main()
|
|||||||
#if defined BOOST_THREAD_PROVIDES_SIGNATURE_PACKAGED_TASK && defined(BOOST_THREAD_PROVIDES_VARIADIC_THREAD)
|
#if defined BOOST_THREAD_PROVIDES_SIGNATURE_PACKAGED_TASK && defined(BOOST_THREAD_PROVIDES_VARIADIC_THREAD)
|
||||||
boost::thread(func4, boost::move(p)).detach();
|
boost::thread(func4, boost::move(p)).detach();
|
||||||
#else
|
#else
|
||||||
p.set_exception(boost::make_exception_ptr(3.5));
|
p.set_exception(::make_exception_ptr(3.5));
|
||||||
#endif
|
#endif
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
@@ -238,7 +235,7 @@ int main()
|
|||||||
#if defined BOOST_THREAD_PROVIDES_SIGNATURE_PACKAGED_TASK && defined(BOOST_THREAD_PROVIDES_VARIADIC_THREAD)
|
#if defined BOOST_THREAD_PROVIDES_SIGNATURE_PACKAGED_TASK && defined(BOOST_THREAD_PROVIDES_VARIADIC_THREAD)
|
||||||
boost::thread(func6, boost::move(p)).detach();
|
boost::thread(func6, boost::move(p)).detach();
|
||||||
#else
|
#else
|
||||||
p.set_exception(boost::make_exception_ptr(4));
|
p.set_exception(::make_exception_ptr(4));
|
||||||
#endif
|
#endif
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
@@ -246,7 +243,7 @@ int main()
|
|||||||
f.get();
|
f.get();
|
||||||
BOOST_TEST(false);
|
BOOST_TEST(false);
|
||||||
}
|
}
|
||||||
catch (boost::wrap<int> const& i)
|
catch (::wrap<int> const& i)
|
||||||
{
|
{
|
||||||
BOOST_TEST(i.value == 4);
|
BOOST_TEST(i.value == 4);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -48,22 +48,6 @@ namespace boost
|
|||||||
os << underlying_cast<int>(st) << " ";
|
os << underlying_cast<int>(st) << " ";
|
||||||
return os;
|
return os;
|
||||||
}
|
}
|
||||||
template <typename T>
|
|
||||||
struct wrap
|
|
||||||
{
|
|
||||||
wrap(T const& v) :
|
|
||||||
value(v)
|
|
||||||
{
|
|
||||||
}
|
|
||||||
T value;
|
|
||||||
|
|
||||||
};
|
|
||||||
|
|
||||||
template <typename T>
|
|
||||||
exception_ptr make_exception_ptr(T v)
|
|
||||||
{
|
|
||||||
return copy_exception(wrap<T> (v));
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void func1(boost::promise<int> p)
|
void func1(boost::promise<int> p)
|
||||||
|
|||||||
@@ -46,22 +46,6 @@ namespace boost
|
|||||||
os << underlying_cast<int>(st) << " ";
|
os << underlying_cast<int>(st) << " ";
|
||||||
return os;
|
return os;
|
||||||
}
|
}
|
||||||
template <typename T>
|
|
||||||
struct wrap
|
|
||||||
{
|
|
||||||
wrap(T const& v) :
|
|
||||||
value(v)
|
|
||||||
{
|
|
||||||
}
|
|
||||||
T value;
|
|
||||||
|
|
||||||
};
|
|
||||||
|
|
||||||
template <typename T>
|
|
||||||
exception_ptr make_exception_ptr(T v)
|
|
||||||
{
|
|
||||||
return copy_exception(wrap<T> (v));
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void func1(boost::promise<int> p)
|
void func1(boost::promise<int> p)
|
||||||
|
|||||||
@@ -49,22 +49,6 @@ namespace boost
|
|||||||
os << underlying_cast<int>(st) << " ";
|
os << underlying_cast<int>(st) << " ";
|
||||||
return os;
|
return os;
|
||||||
}
|
}
|
||||||
template <typename T>
|
|
||||||
struct wrap
|
|
||||||
{
|
|
||||||
wrap(T const& v) :
|
|
||||||
value(v)
|
|
||||||
{
|
|
||||||
}
|
|
||||||
T value;
|
|
||||||
|
|
||||||
};
|
|
||||||
|
|
||||||
template <typename T>
|
|
||||||
exception_ptr make_exception_ptr(T v)
|
|
||||||
{
|
|
||||||
return copy_exception(wrap<T> (v));
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void func1(boost::promise<int> p)
|
void func1(boost::promise<int> p)
|
||||||
|
|||||||
@@ -24,8 +24,6 @@
|
|||||||
#include <boost/detail/lightweight_test.hpp>
|
#include <boost/detail/lightweight_test.hpp>
|
||||||
#include <boost/static_assert.hpp>
|
#include <boost/static_assert.hpp>
|
||||||
|
|
||||||
namespace boost
|
|
||||||
{
|
|
||||||
template <typename T>
|
template <typename T>
|
||||||
struct wrap
|
struct wrap
|
||||||
{
|
{
|
||||||
@@ -38,11 +36,10 @@ namespace boost
|
|||||||
};
|
};
|
||||||
|
|
||||||
template <typename T>
|
template <typename T>
|
||||||
exception_ptr make_exception_ptr(T v)
|
boost::exception_ptr make_exception_ptr(T v)
|
||||||
{
|
{
|
||||||
return copy_exception(wrap<T> (v));
|
return boost::copy_exception(wrap<T> (v));
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
#if defined BOOST_THREAD_PROVIDES_SIGNATURE_PACKAGED_TASK && defined(BOOST_THREAD_PROVIDES_VARIADIC_THREAD)
|
#if defined BOOST_THREAD_PROVIDES_SIGNATURE_PACKAGED_TASK && defined(BOOST_THREAD_PROVIDES_VARIADIC_THREAD)
|
||||||
void func(boost::promise<int> p)
|
void func(boost::promise<int> p)
|
||||||
@@ -51,8 +48,8 @@ boost::promise<int> p;
|
|||||||
void func()
|
void func()
|
||||||
#endif
|
#endif
|
||||||
{
|
{
|
||||||
//p.set_exception(boost::make_exception_ptr(3));
|
//p.set_exception(::make_exception_ptr(3));
|
||||||
p.set_exception_at_thread_exit(boost::make_exception_ptr(3));
|
p.set_exception_at_thread_exit(::make_exception_ptr(3));
|
||||||
}
|
}
|
||||||
|
|
||||||
int main()
|
int main()
|
||||||
@@ -72,7 +69,7 @@ int main()
|
|||||||
f.get();
|
f.get();
|
||||||
BOOST_TEST(false);
|
BOOST_TEST(false);
|
||||||
}
|
}
|
||||||
catch (boost::wrap<int> i)
|
catch (::wrap<int> i)
|
||||||
{
|
{
|
||||||
BOOST_TEST(i.value == 3);
|
BOOST_TEST(i.value == 3);
|
||||||
}
|
}
|
||||||
@@ -96,7 +93,7 @@ int main()
|
|||||||
f.get();
|
f.get();
|
||||||
BOOST_TEST(false);
|
BOOST_TEST(false);
|
||||||
}
|
}
|
||||||
catch (boost::wrap<int> i)
|
catch (::wrap<int> i)
|
||||||
{
|
{
|
||||||
BOOST_TEST(i.value == 3);
|
BOOST_TEST(i.value == 3);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -24,8 +24,6 @@
|
|||||||
#include <boost/detail/lightweight_test.hpp>
|
#include <boost/detail/lightweight_test.hpp>
|
||||||
#include <boost/static_assert.hpp>
|
#include <boost/static_assert.hpp>
|
||||||
|
|
||||||
namespace boost
|
|
||||||
{
|
|
||||||
template <typename T>
|
template <typename T>
|
||||||
struct wrap
|
struct wrap
|
||||||
{
|
{
|
||||||
@@ -38,11 +36,10 @@ namespace boost
|
|||||||
};
|
};
|
||||||
|
|
||||||
template <typename T>
|
template <typename T>
|
||||||
exception_ptr make_exception_ptr(T v)
|
boost::exception_ptr make_exception_ptr(T v)
|
||||||
{
|
{
|
||||||
return copy_exception(wrap<T> (v));
|
return boost::copy_exception(wrap<T> (v));
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
int main()
|
int main()
|
||||||
{
|
{
|
||||||
@@ -51,19 +48,19 @@ int main()
|
|||||||
typedef int T;
|
typedef int T;
|
||||||
boost::promise<T> p;
|
boost::promise<T> p;
|
||||||
boost::future<T> f = p.get_future();
|
boost::future<T> f = p.get_future();
|
||||||
p.set_exception(boost::make_exception_ptr(3));
|
p.set_exception(::make_exception_ptr(3));
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
f.get();
|
f.get();
|
||||||
BOOST_TEST(false);
|
BOOST_TEST(false);
|
||||||
}
|
}
|
||||||
catch (boost::wrap<int> i)
|
catch (::wrap<int> i)
|
||||||
{
|
{
|
||||||
BOOST_TEST(i.value == 3);
|
BOOST_TEST(i.value == 3);
|
||||||
}
|
}
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
p.set_exception(boost::make_exception_ptr(3));
|
p.set_exception(::make_exception_ptr(3));
|
||||||
BOOST_TEST(false);
|
BOOST_TEST(false);
|
||||||
}
|
}
|
||||||
catch (const boost::future_error& e)
|
catch (const boost::future_error& e)
|
||||||
@@ -79,7 +76,7 @@ int main()
|
|||||||
typedef int T;
|
typedef int T;
|
||||||
boost::promise<T> p;
|
boost::promise<T> p;
|
||||||
boost::future<T> f = p.get_future();
|
boost::future<T> f = p.get_future();
|
||||||
p.set_exception_deferred(boost::make_exception_ptr(3));
|
p.set_exception_deferred(::make_exception_ptr(3));
|
||||||
BOOST_TEST(!f.is_ready());
|
BOOST_TEST(!f.is_ready());
|
||||||
p.notify_deferred();
|
p.notify_deferred();
|
||||||
try
|
try
|
||||||
@@ -87,13 +84,13 @@ int main()
|
|||||||
f.get();
|
f.get();
|
||||||
BOOST_TEST(false);
|
BOOST_TEST(false);
|
||||||
}
|
}
|
||||||
catch (boost::wrap<int> i)
|
catch (::wrap<int> i)
|
||||||
{
|
{
|
||||||
BOOST_TEST(i.value == 3);
|
BOOST_TEST(i.value == 3);
|
||||||
}
|
}
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
p.set_exception(boost::make_exception_ptr(3));
|
p.set_exception(::make_exception_ptr(3));
|
||||||
BOOST_TEST(false);
|
BOOST_TEST(false);
|
||||||
}
|
}
|
||||||
catch (const boost::future_error& e)
|
catch (const boost::future_error& e)
|
||||||
|
|||||||
@@ -23,6 +23,7 @@
|
|||||||
#include <boost/thread/future.hpp>
|
#include <boost/thread/future.hpp>
|
||||||
#include <boost/detail/lightweight_test.hpp>
|
#include <boost/detail/lightweight_test.hpp>
|
||||||
#include <boost/static_assert.hpp>
|
#include <boost/static_assert.hpp>
|
||||||
|
#include <boost/config.hpp>
|
||||||
|
|
||||||
#ifdef BOOST_MSVC
|
#ifdef BOOST_MSVC
|
||||||
# pragma warning(disable: 4702) // unreachable code
|
# pragma warning(disable: 4702) // unreachable code
|
||||||
@@ -37,6 +38,9 @@ struct A
|
|||||||
{
|
{
|
||||||
throw 10;
|
throw 10;
|
||||||
}
|
}
|
||||||
|
#if !defined(BOOST_NO_CXX11_DEFAULTED_FUNCTIONS)
|
||||||
|
A& operator= (const A&) = default;
|
||||||
|
#endif
|
||||||
};
|
};
|
||||||
|
|
||||||
int main()
|
int main()
|
||||||
|
|||||||
@@ -28,8 +28,6 @@
|
|||||||
|
|
||||||
#if defined BOOST_THREAD_USES_CHRONO
|
#if defined BOOST_THREAD_USES_CHRONO
|
||||||
|
|
||||||
namespace boost
|
|
||||||
{
|
|
||||||
template <typename T>
|
template <typename T>
|
||||||
struct wrap
|
struct wrap
|
||||||
{
|
{
|
||||||
@@ -39,9 +37,8 @@ struct wrap
|
|||||||
};
|
};
|
||||||
|
|
||||||
template <typename T>
|
template <typename T>
|
||||||
exception_ptr make_exception_ptr(T v) {
|
boost::exception_ptr make_exception_ptr(T v) {
|
||||||
return copy_exception(wrap<T>(v));
|
return boost::copy_exception(wrap<T>(v));
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void func1(boost::promise<int> p)
|
void func1(boost::promise<int> p)
|
||||||
@@ -53,7 +50,7 @@ void func1(boost::promise<int> p)
|
|||||||
void func2(boost::promise<int> p)
|
void func2(boost::promise<int> p)
|
||||||
{
|
{
|
||||||
boost::this_thread::sleep_for(boost::chrono::milliseconds(500));
|
boost::this_thread::sleep_for(boost::chrono::milliseconds(500));
|
||||||
p.set_exception(boost::make_exception_ptr(3));
|
p.set_exception(::make_exception_ptr(3));
|
||||||
}
|
}
|
||||||
|
|
||||||
int j = 0;
|
int j = 0;
|
||||||
@@ -68,7 +65,7 @@ void func3(boost::promise<int&> p)
|
|||||||
void func4(boost::promise<int&> p)
|
void func4(boost::promise<int&> p)
|
||||||
{
|
{
|
||||||
boost::this_thread::sleep_for(boost::chrono::milliseconds(500));
|
boost::this_thread::sleep_for(boost::chrono::milliseconds(500));
|
||||||
p.set_exception(boost::make_exception_ptr(3.5));
|
p.set_exception(::make_exception_ptr(3.5));
|
||||||
}
|
}
|
||||||
|
|
||||||
void func5(boost::promise<void> p)
|
void func5(boost::promise<void> p)
|
||||||
@@ -80,7 +77,7 @@ void func5(boost::promise<void> p)
|
|||||||
void func6(boost::promise<void> p)
|
void func6(boost::promise<void> p)
|
||||||
{
|
{
|
||||||
boost::this_thread::sleep_for(boost::chrono::milliseconds(500));
|
boost::this_thread::sleep_for(boost::chrono::milliseconds(500));
|
||||||
p.set_exception(boost::make_exception_ptr(4));
|
p.set_exception(::make_exception_ptr(4));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@@ -106,7 +103,7 @@ int main()
|
|||||||
#if defined BOOST_THREAD_PROVIDES_SIGNATURE_PACKAGED_TASK && defined(BOOST_THREAD_PROVIDES_VARIADIC_THREAD)
|
#if defined BOOST_THREAD_PROVIDES_SIGNATURE_PACKAGED_TASK && defined(BOOST_THREAD_PROVIDES_VARIADIC_THREAD)
|
||||||
boost::thread(func2, boost::move(p)).detach();
|
boost::thread(func2, boost::move(p)).detach();
|
||||||
#else
|
#else
|
||||||
p.set_exception(boost::make_exception_ptr(3));
|
p.set_exception(::make_exception_ptr(3));
|
||||||
#endif
|
#endif
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
@@ -114,7 +111,7 @@ int main()
|
|||||||
BOOST_TEST(f.get() == 3);
|
BOOST_TEST(f.get() == 3);
|
||||||
BOOST_TEST(false);
|
BOOST_TEST(false);
|
||||||
}
|
}
|
||||||
catch (boost::wrap<int> const& i)
|
catch (::wrap<int> const& i)
|
||||||
{
|
{
|
||||||
BOOST_TEST(i.value == 3);
|
BOOST_TEST(i.value == 3);
|
||||||
}
|
}
|
||||||
@@ -146,7 +143,7 @@ int main()
|
|||||||
#if defined BOOST_THREAD_PROVIDES_SIGNATURE_PACKAGED_TASK && defined(BOOST_THREAD_PROVIDES_VARIADIC_THREAD)
|
#if defined BOOST_THREAD_PROVIDES_SIGNATURE_PACKAGED_TASK && defined(BOOST_THREAD_PROVIDES_VARIADIC_THREAD)
|
||||||
boost::thread(func4, boost::move(p)).detach();
|
boost::thread(func4, boost::move(p)).detach();
|
||||||
#else
|
#else
|
||||||
p.set_exception(boost::make_exception_ptr(3.5));
|
p.set_exception(::make_exception_ptr(3.5));
|
||||||
#endif
|
#endif
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
@@ -154,7 +151,7 @@ int main()
|
|||||||
BOOST_TEST(f.get() == 3);
|
BOOST_TEST(f.get() == 3);
|
||||||
BOOST_TEST(false);
|
BOOST_TEST(false);
|
||||||
}
|
}
|
||||||
catch (boost::wrap<double> const& i)
|
catch (::wrap<double> const& i)
|
||||||
{
|
{
|
||||||
BOOST_TEST(i.value == 3.5);
|
BOOST_TEST(i.value == 3.5);
|
||||||
}
|
}
|
||||||
@@ -181,7 +178,7 @@ int main()
|
|||||||
#if defined BOOST_THREAD_PROVIDES_SIGNATURE_PACKAGED_TASK && defined(BOOST_THREAD_PROVIDES_VARIADIC_THREAD)
|
#if defined BOOST_THREAD_PROVIDES_SIGNATURE_PACKAGED_TASK && defined(BOOST_THREAD_PROVIDES_VARIADIC_THREAD)
|
||||||
boost::thread(func6, boost::move(p)).detach();
|
boost::thread(func6, boost::move(p)).detach();
|
||||||
#else
|
#else
|
||||||
p.set_exception(boost::make_exception_ptr(4));
|
p.set_exception(::make_exception_ptr(4));
|
||||||
#endif
|
#endif
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
@@ -189,7 +186,7 @@ int main()
|
|||||||
f.get();
|
f.get();
|
||||||
BOOST_TEST(false);
|
BOOST_TEST(false);
|
||||||
}
|
}
|
||||||
catch (boost::wrap<int> const& i)
|
catch (::wrap<int> const& i)
|
||||||
{
|
{
|
||||||
BOOST_TEST(i.value == 4);
|
BOOST_TEST(i.value == 4);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -48,22 +48,6 @@ namespace boost
|
|||||||
os << underlying_cast<int>(st) << " ";
|
os << underlying_cast<int>(st) << " ";
|
||||||
return os;
|
return os;
|
||||||
}
|
}
|
||||||
template <typename T>
|
|
||||||
struct wrap
|
|
||||||
{
|
|
||||||
wrap(T const& v) :
|
|
||||||
value(v)
|
|
||||||
{
|
|
||||||
}
|
|
||||||
T value;
|
|
||||||
|
|
||||||
};
|
|
||||||
|
|
||||||
template <typename T>
|
|
||||||
exception_ptr make_exception_ptr(T v)
|
|
||||||
{
|
|
||||||
return copy_exception(wrap<T> (v));
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void func1(boost::promise<int> p)
|
void func1(boost::promise<int> p)
|
||||||
|
|||||||
@@ -46,22 +46,6 @@ namespace boost
|
|||||||
os << underlying_cast<int>(st) << " ";
|
os << underlying_cast<int>(st) << " ";
|
||||||
return os;
|
return os;
|
||||||
}
|
}
|
||||||
template <typename T>
|
|
||||||
struct wrap
|
|
||||||
{
|
|
||||||
wrap(T const& v) :
|
|
||||||
value(v)
|
|
||||||
{
|
|
||||||
}
|
|
||||||
T value;
|
|
||||||
|
|
||||||
};
|
|
||||||
|
|
||||||
template <typename T>
|
|
||||||
exception_ptr make_exception_ptr(T v)
|
|
||||||
{
|
|
||||||
return copy_exception(wrap<T> (v));
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void func1(boost::promise<int> p)
|
void func1(boost::promise<int> p)
|
||||||
|
|||||||
@@ -49,22 +49,6 @@ namespace boost
|
|||||||
os << underlying_cast<int>(st) << " ";
|
os << underlying_cast<int>(st) << " ";
|
||||||
return os;
|
return os;
|
||||||
}
|
}
|
||||||
template <typename T>
|
|
||||||
struct wrap
|
|
||||||
{
|
|
||||||
wrap(T const& v) :
|
|
||||||
value(v)
|
|
||||||
{
|
|
||||||
}
|
|
||||||
T value;
|
|
||||||
|
|
||||||
};
|
|
||||||
|
|
||||||
template <typename T>
|
|
||||||
exception_ptr make_exception_ptr(T v)
|
|
||||||
{
|
|
||||||
return copy_exception(wrap<T> (v));
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void func1(boost::promise<int> p)
|
void func1(boost::promise<int> p)
|
||||||
|
|||||||
@@ -14,6 +14,7 @@
|
|||||||
#include <boost/thread/thread_only.hpp>
|
#include <boost/thread/thread_only.hpp>
|
||||||
#include <boost/thread/xtime.hpp>
|
#include <boost/thread/xtime.hpp>
|
||||||
|
|
||||||
|
#include <boost/config.hpp>
|
||||||
#include <boost/test/unit_test.hpp>
|
#include <boost/test/unit_test.hpp>
|
||||||
|
|
||||||
#include "./util.inl"
|
#include "./util.inl"
|
||||||
@@ -41,14 +42,17 @@ void condition_test_thread(condition_test_data* data)
|
|||||||
struct cond_predicate
|
struct cond_predicate
|
||||||
{
|
{
|
||||||
cond_predicate(int& var, int val) : _var(var), _val(val) { }
|
cond_predicate(int& var, int val) : _var(var), _val(val) { }
|
||||||
|
#if !defined(BOOST_NO_CXX11_DEFAULTED_FUNCTIONS)
|
||||||
|
cond_predicate(cond_predicate const&) = default;
|
||||||
|
#endif
|
||||||
|
|
||||||
bool operator()() { return _var == _val; }
|
bool operator()() { return _var == _val; }
|
||||||
|
|
||||||
int& _var;
|
int& _var;
|
||||||
int _val;
|
int _val;
|
||||||
|
|
||||||
private:
|
private:
|
||||||
void operator=(cond_predicate&);
|
void operator=(cond_predicate&);
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|
||||||
void condition_test_waits(condition_test_data* data)
|
void condition_test_waits(condition_test_data* data)
|
||||||
|
|||||||
@@ -12,7 +12,12 @@
|
|||||||
|
|
||||||
BOOST_AUTO_TEST_CASE(test_physical_concurrency_is_non_zero)
|
BOOST_AUTO_TEST_CASE(test_physical_concurrency_is_non_zero)
|
||||||
{
|
{
|
||||||
|
#if defined(__MINGW32__) && !defined(__MINGW64__)
|
||||||
|
// This matches the condition in win32/thread.cpp, even though
|
||||||
|
// that's probably wrong on MinGW-w64 in 32 bit mode
|
||||||
|
#else
|
||||||
BOOST_CHECK(boost::thread::physical_concurrency()!=0);
|
BOOST_CHECK(boost::thread::physical_concurrency()!=0);
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -6,6 +6,7 @@
|
|||||||
#define BOOST_THREAD_VERSION 2
|
#define BOOST_THREAD_VERSION 2
|
||||||
#define BOOST_TEST_MODULE Boost.Threads: shared_mutex_part2 test suite
|
#define BOOST_TEST_MODULE Boost.Threads: shared_mutex_part2 test suite
|
||||||
|
|
||||||
|
#include <boost/config.hpp>
|
||||||
#include <boost/test/unit_test.hpp>
|
#include <boost/test/unit_test.hpp>
|
||||||
#include <boost/thread/thread.hpp>
|
#include <boost/thread/thread.hpp>
|
||||||
#include <boost/thread/xtime.hpp>
|
#include <boost/thread/xtime.hpp>
|
||||||
@@ -36,6 +37,10 @@ public:
|
|||||||
unblocked_mutex(unblocked_mutex_),unblocked_count(unblocked_count_)
|
unblocked_mutex(unblocked_mutex_),unblocked_count(unblocked_count_)
|
||||||
{}
|
{}
|
||||||
|
|
||||||
|
#if !defined(BOOST_NO_CXX11_DEFAULTED_FUNCTIONS)
|
||||||
|
simple_upgrade_thread(simple_upgrade_thread const&) = default;
|
||||||
|
#endif
|
||||||
|
|
||||||
void operator()()
|
void operator()()
|
||||||
{
|
{
|
||||||
boost::upgrade_lock<boost::shared_mutex> lk(rwm);
|
boost::upgrade_lock<boost::shared_mutex> lk(rwm);
|
||||||
|
|||||||
@@ -205,7 +205,10 @@ void do_test_tss()
|
|||||||
// Also this usually will be triggered only when bound to the static version of thread lib.
|
// Also this usually will be triggered only when bound to the static version of thread lib.
|
||||||
// 2006-10-02 Roland Schwarz
|
// 2006-10-02 Roland Schwarz
|
||||||
//BOOST_CHECK_EQUAL(tss_instances, 0);
|
//BOOST_CHECK_EQUAL(tss_instances, 0);
|
||||||
|
#if !defined(__MINGW32__)
|
||||||
|
// This fails on MinGW, when using the static lib
|
||||||
BOOST_CHECK_MESSAGE(tss_instances == 0, "Support of automatic tss cleanup for native threading API not available");
|
BOOST_CHECK_MESSAGE(tss_instances == 0, "Support of automatic tss cleanup for native threading API not available");
|
||||||
|
#endif
|
||||||
BOOST_CHECK_EQUAL(tss_total, 5);
|
BOOST_CHECK_EQUAL(tss_total, 5);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -106,7 +106,7 @@ int main()
|
|||||||
BOOST_TEST(f_run == true);
|
BOOST_TEST(f_run == true);
|
||||||
std::cout << __FILE__ << ":" << __LINE__ <<" " << G::n_alive << std::endl;
|
std::cout << __FILE__ << ":" << __LINE__ <<" " << G::n_alive << std::endl;
|
||||||
}
|
}
|
||||||
#ifndef BOOST_MSVC
|
#if !defined(BOOST_MSVC) && !defined(__MINGW32__)
|
||||||
f_run = false;
|
f_run = false;
|
||||||
{
|
{
|
||||||
std::cout << __FILE__ << ":" << __LINE__ <<" " << G::n_alive << std::endl;
|
std::cout << __FILE__ << ":" << __LINE__ <<" " << G::n_alive << std::endl;
|
||||||
|
|||||||
@@ -102,7 +102,7 @@ int main()
|
|||||||
BOOST_TEST(f_run == true);
|
BOOST_TEST(f_run == true);
|
||||||
}
|
}
|
||||||
f_run = false;
|
f_run = false;
|
||||||
#ifndef BOOST_MSVC
|
#if !defined(BOOST_MSVC) && !defined(__MINGW32__)
|
||||||
{
|
{
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
@@ -125,7 +125,7 @@ int main()
|
|||||||
BOOST_TEST(G::n_alive == 0);
|
BOOST_TEST(G::n_alive == 0);
|
||||||
BOOST_TEST(G::op_run);
|
BOOST_TEST(G::op_run);
|
||||||
}
|
}
|
||||||
#ifndef BOOST_MSVC
|
#if !defined(BOOST_MSVC) && !defined(__MINGW32__)
|
||||||
G::op_run = false;
|
G::op_run = false;
|
||||||
{
|
{
|
||||||
try
|
try
|
||||||
|
|||||||
@@ -61,7 +61,7 @@ int main()
|
|||||||
t.join();
|
t.join();
|
||||||
BOOST_TEST(f_run == true);
|
BOOST_TEST(f_run == true);
|
||||||
}
|
}
|
||||||
#ifndef BOOST_MSVC
|
#if !defined(BOOST_MSVC) && !defined(__MINGW32__)
|
||||||
{
|
{
|
||||||
f_run = false;
|
f_run = false;
|
||||||
try
|
try
|
||||||
|
|||||||
@@ -10,10 +10,11 @@
|
|||||||
#include <boost/detail/lightweight_test.hpp>
|
#include <boost/detail/lightweight_test.hpp>
|
||||||
|
|
||||||
#if ! defined BOOST_THREAD_TEST_TIME_MS
|
#if ! defined BOOST_THREAD_TEST_TIME_MS
|
||||||
#ifdef BOOST_THREAD_PLATFORM_WIN32
|
#ifdef __linux__
|
||||||
#define BOOST_THREAD_TEST_TIME_MS 250
|
|
||||||
#else
|
|
||||||
#define BOOST_THREAD_TEST_TIME_MS 75
|
#define BOOST_THREAD_TEST_TIME_MS 75
|
||||||
|
#else
|
||||||
|
// Windows, Cygwin, macOS all need this
|
||||||
|
#define BOOST_THREAD_TEST_TIME_MS 250
|
||||||
#endif
|
#endif
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
|||||||
@@ -12,6 +12,7 @@
|
|||||||
#include <boost/thread/mutex.hpp>
|
#include <boost/thread/mutex.hpp>
|
||||||
#include <boost/thread/condition.hpp>
|
#include <boost/thread/condition.hpp>
|
||||||
#include <boost/thread/thread.hpp>
|
#include <boost/thread/thread.hpp>
|
||||||
|
#include <boost/config.hpp>
|
||||||
|
|
||||||
#ifndef DEFAULT_EXECUTION_MONITOR_TYPE
|
#ifndef DEFAULT_EXECUTION_MONITOR_TYPE
|
||||||
# define DEFAULT_EXECUTION_MONITOR_TYPE execution_monitor::use_condition
|
# define DEFAULT_EXECUTION_MONITOR_TYPE execution_monitor::use_condition
|
||||||
@@ -133,6 +134,10 @@ class indirect_adapter
|
|||||||
public:
|
public:
|
||||||
indirect_adapter(F func, execution_monitor& monitor)
|
indirect_adapter(F func, execution_monitor& monitor)
|
||||||
: func(func), monitor(monitor) { }
|
: func(func), monitor(monitor) { }
|
||||||
|
#if !defined(BOOST_NO_CXX11_DEFAULTED_FUNCTIONS)
|
||||||
|
indirect_adapter(indirect_adapter const&) = default;
|
||||||
|
#endif
|
||||||
|
|
||||||
void operator()() const
|
void operator()() const
|
||||||
{
|
{
|
||||||
try
|
try
|
||||||
@@ -210,6 +215,10 @@ class thread_member_binder
|
|||||||
public:
|
public:
|
||||||
thread_member_binder(R (T::*func)(), T& param)
|
thread_member_binder(R (T::*func)(), T& param)
|
||||||
: func(func), param(param) { }
|
: func(func), param(param) { }
|
||||||
|
#if !defined(BOOST_NO_CXX11_DEFAULTED_FUNCTIONS)
|
||||||
|
thread_member_binder(thread_member_binder const&) = default;
|
||||||
|
#endif
|
||||||
|
|
||||||
void operator()() const { (param.*func)(); }
|
void operator()() const { (param.*func)(); }
|
||||||
|
|
||||||
private:
|
private:
|
||||||
|
|||||||
Reference in New Issue
Block a user