Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
G
googletest
Project
Overview
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
Chen Yisong
googletest
Commits
542b41e5
Commit
542b41e5
authored
Mar 04, 2010
by
zhanyong.wan
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Simplifies ThreadWithParam.
parent
12a92c26
Hide whitespace changes
Inline
Side-by-side
Showing
1 changed file
with
20 additions
and
40 deletions
+20
-40
gtest-port.h
include/gtest/internal/gtest-port.h
+20
-40
No files found.
include/gtest/internal/gtest-port.h
View file @
542b41e5
...
...
@@ -811,10 +811,7 @@ class Notification {
};
// Helper class for testing Google Test's multi-threading constructs.
// To use it, derive a class template ThreadWithParam<T> from
// ThreadWithParamBase<T> and implement thread creation and startup in
// the constructor and joining the thread in JoinUnderlyingThread().
// Then you can write:
// To use it, write:
//
// void ThreadFunc(int param) { /* Do things with param */ }
// Notification thread_can_start;
...
...
@@ -826,40 +823,51 @@ class Notification {
// These classes are only for testing Google Test's own constructs. Do
// not use them in user tests, either directly or indirectly.
template
<
typename
T
>
class
ThreadWithParam
Base
{
class
ThreadWithParam
{
public
:
typedef
void
(
*
UserThreadFunc
)(
T
);
ThreadWithParam
Base
(
ThreadWithParam
(
UserThreadFunc
func
,
T
param
,
Notification
*
thread_can_start
)
:
func_
(
func
),
param_
(
param
),
thread_can_start_
(
thread_can_start
),
finished_
(
false
)
{}
virtual
~
ThreadWithParamBase
()
{}
finished_
(
false
)
{
// The thread can be created only after all fields except thread_
// have been initialized.
GTEST_CHECK_POSIX_SUCCESS_
(
pthread_create
(
&
thread_
,
0
,
ThreadMainStatic
,
this
));
}
~
ThreadWithParam
()
{
Join
();
}
void
Join
()
{
if
(
!
finished_
)
{
JoinUnderlyingThread
(
);
GTEST_CHECK_POSIX_SUCCESS_
(
pthread_join
(
thread_
,
0
)
);
finished_
=
true
;
}
}
virtual
void
JoinUnderlyingThread
()
=
0
;
private
:
void
ThreadMain
()
{
if
(
thread_can_start_
!=
NULL
)
thread_can_start_
->
WaitForNotification
();
func_
(
param_
);
}
protected
:
static
void
*
ThreadMainStatic
(
void
*
thread_with_param
)
{
static_cast
<
ThreadWithParam
<
T
>*>
(
thread_with_param
)
->
ThreadMain
();
return
NULL
;
// We are not interested in the thread exit code.
}
const
UserThreadFunc
func_
;
// User-supplied thread function.
const
T
param_
;
// User-supplied parameter to the thread function.
// When non-NULL, used to block execution until the controller thread
// notifies.
Notification
*
const
thread_can_start_
;
bool
finished_
;
// true iff we know that the thread function has finished.
pthread_t
thread_
;
// The native thread object.
GTEST_DISALLOW_COPY_AND_ASSIGN_
(
ThreadWithParam
);
};
// gtest-port.h guarantees to #include <pthread.h> when GTEST_HAS_PTHREAD is
...
...
@@ -1024,34 +1032,6 @@ class ThreadLocal {
GTEST_DISALLOW_COPY_AND_ASSIGN_
(
ThreadLocal
);
};
// Helper class for testing Google Test's multi-threading constructs.
template
<
typename
T
>
class
ThreadWithParam
:
public
ThreadWithParamBase
<
T
>
{
public
:
ThreadWithParam
(
void
(
*
func
)(
T
),
T
param
,
Notification
*
thread_can_start
)
:
ThreadWithParamBase
<
T
>
(
func
,
param
,
thread_can_start
)
{
// The thread can be created only after all fields except thread_
// have been initialized.
GTEST_CHECK_POSIX_SUCCESS_
(
pthread_create
(
&
thread_
,
0
,
ThreadMainStatic
,
this
));
}
virtual
~
ThreadWithParam
()
{
this
->
Join
();
}
virtual
void
JoinUnderlyingThread
()
{
GTEST_CHECK_POSIX_SUCCESS_
(
pthread_join
(
thread_
,
0
));
}
private
:
static
void
*
ThreadMainStatic
(
void
*
thread_with_param
)
{
static_cast
<
ThreadWithParam
<
T
>*>
(
thread_with_param
)
->
ThreadMain
();
return
NULL
;
// We are not interested in the thread exit code.
}
pthread_t
thread_
;
// The native thread object.
GTEST_DISALLOW_COPY_AND_ASSIGN_
(
ThreadWithParam
);
};
#define GTEST_IS_THREADSAFE 1
#else // GTEST_HAS_PTHREAD
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment