Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
A
Actor Framework
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Operations
Operations
Metrics
Environments
Analytics
Analytics
CI / CD
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
cpp-libs
Actor Framework
Commits
0d3c0567
Commit
0d3c0567
authored
Jun 28, 2012
by
Dominik Charousset
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
maintenance
parent
db48145f
Changes
11
Hide whitespace changes
Inline
Side-by-side
Showing
11 changed files
with
55 additions
and
53 deletions
+55
-53
benchmarks/actor_creation.cpp
benchmarks/actor_creation.cpp
+3
-3
benchmarks/distributed.cpp
benchmarks/distributed.cpp
+2
-2
benchmarks/mailbox_performance.cpp
benchmarks/mailbox_performance.cpp
+1
-1
benchmarks/mixed_case.cpp
benchmarks/mixed_case.cpp
+4
-4
cppa/cppa.hpp
cppa/cppa.hpp
+26
-22
cppa/detail/uniform_type_info_map.hpp
cppa/detail/uniform_type_info_map.hpp
+7
-9
examples/dining_philosophers.cpp
examples/dining_philosophers.cpp
+5
-5
examples/math_actor_example.cpp
examples/math_actor_example.cpp
+1
-1
src/uniform_type_info.cpp
src/uniform_type_info.cpp
+1
-1
unit_testing/ping_pong.cpp
unit_testing/ping_pong.cpp
+2
-2
unit_testing/test__spawn.cpp
unit_testing/test__spawn.cpp
+3
-3
No files found.
benchmarks/actor_creation.cpp
View file @
0d3c0567
...
@@ -55,8 +55,8 @@ struct testee : sb_actor<testee> {
...
@@ -55,8 +55,8 @@ struct testee : sb_actor<testee> {
},
},
on
<
atom
(
"spread"
),
int
>
()
>>
[
=
](
int
x
)
{
on
<
atom
(
"spread"
),
int
>
()
>>
[
=
](
int
x
)
{
any_tuple
msg
=
make_cow_tuple
(
atom
(
"spread"
),
x
-
1
);
any_tuple
msg
=
make_cow_tuple
(
atom
(
"spread"
),
x
-
1
);
spawn
(
new
testee
(
this
)
)
<<
msg
;
spawn
<
testee
>
(
this
)
<<
msg
;
spawn
(
new
testee
(
this
)
)
<<
msg
;
spawn
<
testee
>
(
this
)
<<
msg
;
become
(
become
(
on
<
atom
(
"result"
),
uint32_t
>
()
>>
[
=
](
uint32_t
r1
)
{
on
<
atom
(
"result"
),
uint32_t
>
()
>>
[
=
](
uint32_t
r1
)
{
become
(
become
(
...
@@ -107,7 +107,7 @@ int main(int argc, char** argv) {
...
@@ -107,7 +107,7 @@ int main(int argc, char** argv) {
send
(
spawn
(
stacked_testee
,
self
),
atom
(
"spread"
),
num
);
send
(
spawn
(
stacked_testee
,
self
),
atom
(
"spread"
),
num
);
}
}
else
if
(
strcmp
(
argv
[
1
],
"event-based"
)
==
0
)
{
else
if
(
strcmp
(
argv
[
1
],
"event-based"
)
==
0
)
{
send
(
spawn
(
new
testee
(
self
)
),
atom
(
"spread"
),
num
);
send
(
spawn
<
testee
>
(
self
),
atom
(
"spread"
),
num
);
}
}
else
{
else
{
usage
();
usage
();
...
...
benchmarks/distributed.cpp
View file @
0d3c0567
...
@@ -189,7 +189,7 @@ struct server_actor : sb_actor<server_actor> {
...
@@ -189,7 +189,7 @@ struct server_actor : sb_actor<server_actor> {
},
},
on
(
atom
(
"kickoff"
),
arg_match
)
>>
[
=
](
uint32_t
num_pings
)
{
on
(
atom
(
"kickoff"
),
arg_match
)
>>
[
=
](
uint32_t
num_pings
)
{
for
(
auto
&
kvp
:
m_pongs
)
{
for
(
auto
&
kvp
:
m_pongs
)
{
auto
ping
=
spawn
(
new
ping_actor
(
last_sender
()
));
auto
ping
=
spawn
<
ping_actor
>
(
last_sender
(
));
send
(
ping
,
atom
(
"kickoff"
),
kvp
.
second
,
num_pings
);
send
(
ping
,
atom
(
"kickoff"
),
kvp
.
second
,
num_pings
);
}
}
},
},
...
@@ -241,7 +241,7 @@ void server_mode(Iterator first, Iterator last) {
...
@@ -241,7 +241,7 @@ void server_mode(Iterator first, Iterator last) {
};
};
match
(
std
::
vector
<
string
>
{
first
,
last
})
(
(
on
(
kvp_port
)
||
on
(
"-p"
,
_2i
))
>>
[](
int
port
)
{
match
(
std
::
vector
<
string
>
{
first
,
last
})
(
(
on
(
kvp_port
)
||
on
(
"-p"
,
_2i
))
>>
[](
int
port
)
{
if
(
port
>
1024
&&
port
<
65536
)
{
if
(
port
>
1024
&&
port
<
65536
)
{
publish
(
spawn
(
new
server_actor
),
port
);
publish
(
spawn
<
server_actor
>
(
),
port
);
}
}
else
{
else
{
usage
(
"illegal port: "
,
port
);
usage
(
"illegal port: "
,
port
);
...
...
benchmarks/mailbox_performance.cpp
View file @
0d3c0567
...
@@ -91,7 +91,7 @@ int main(int argc, char** argv) {
...
@@ -91,7 +91,7 @@ int main(int argc, char** argv) {
testee
=
spawn
(
receiver
,
num_sender
*
num_msgs
);
testee
=
spawn
(
receiver
,
num_sender
*
num_msgs
);
}
}
else
if
(
strcmp
(
argv
[
1
],
"event-based"
)
==
0
)
{
else
if
(
strcmp
(
argv
[
1
],
"event-based"
)
==
0
)
{
testee
=
spawn
(
new
fsm_receiver
(
num_sender
*
num_msgs
)
);
testee
=
spawn
<
fsm_receiver
>
(
num_sender
*
num_msgs
);
}
}
else
{
else
{
usage
();
usage
();
...
...
benchmarks/mixed_case.cpp
View file @
0d3c0567
...
@@ -101,14 +101,14 @@ struct fsm_chain_master : sb_actor<fsm_chain_master> {
...
@@ -101,14 +101,14 @@ struct fsm_chain_master : sb_actor<fsm_chain_master> {
send
(
worker
,
atom
(
"calc"
),
s_task_n
);
send
(
worker
,
atom
(
"calc"
),
s_task_n
);
next
=
self
;
next
=
self
;
for
(
int
i
=
1
;
i
<
ring_size
;
++
i
)
{
for
(
int
i
=
1
;
i
<
ring_size
;
++
i
)
{
next
=
spawn
(
new
fsm_chain_link
(
next
)
);
next
=
spawn
<
fsm_chain_link
>
(
next
);
}
}
send
(
next
,
atom
(
"token"
),
initial_token_value
);
send
(
next
,
atom
(
"token"
),
initial_token_value
);
}
}
fsm_chain_master
(
actor_ptr
msgcollector
)
:
iteration
(
0
),
mc
(
msgcollector
)
{
fsm_chain_master
(
actor_ptr
msgcollector
)
:
iteration
(
0
),
mc
(
msgcollector
)
{
init_state
=
(
init_state
=
(
on
(
atom
(
"init"
),
arg_match
)
>>
[
=
](
int
rs
,
int
itv
,
int
n
)
{
on
(
atom
(
"init"
),
arg_match
)
>>
[
=
](
int
rs
,
int
itv
,
int
n
)
{
worker
=
spawn
(
new
fsm_worker
(
msgcollector
)
);
worker
=
spawn
<
fsm_worker
>
(
msgcollector
);
iteration
=
0
;
iteration
=
0
;
new_ring
(
rs
,
itv
);
new_ring
(
rs
,
itv
);
become
(
become
(
...
@@ -271,8 +271,8 @@ int main(int argc, char** argv) {
...
@@ -271,8 +271,8 @@ int main(int argc, char** argv) {
int
repetitions
)
{
int
repetitions
)
{
int
num_msgs
=
num_rings
+
(
num_rings
*
repetitions
);
int
num_msgs
=
num_rings
+
(
num_rings
*
repetitions
);
if
(
mode
==
"event-based"
)
{
if
(
mode
==
"event-based"
)
{
auto
mc
=
spawn
(
new
fsm_supervisor
(
num_msgs
)
);
auto
mc
=
spawn
<
fsm_supervisor
>
(
num_msgs
);
run_test
([
&
]()
{
return
spawn
(
new
fsm_chain_master
(
mc
)
);
},
run_test
([
&
]()
{
return
spawn
<
fsm_chain_master
>
(
mc
);
},
num_rings
,
ring_size
,
initial_token_value
,
repetitions
);
num_rings
,
ring_size
,
initial_token_value
,
repetitions
);
}
}
else
if
(
mode
==
"stacked"
)
{
else
if
(
mode
==
"stacked"
)
{
...
...
cppa/cppa.hpp
View file @
0d3c0567
...
@@ -423,19 +423,9 @@ namespace cppa {
...
@@ -423,19 +423,9 @@ namespace cppa {
/**
/**
* @ingroup ActorManagement
* @ingroup ActorManagement
* @brief Spawns a new context-switching actor.
* @brief Spawns a new context-switching or thread-mapped {@link actor}.
* @param impl Instance of an event-based actor.
* @returns An {@link actor_ptr} to the spawned {@link actor}.
*/
inline
actor_ptr
spawn
(
scheduled_actor
*
impl
)
{
return
get_scheduler
()
->
spawn
(
impl
);
}
/**
* @ingroup ActorManagement
* @brief Spawns a new context-switching actor.
* @tparam Hint A hint to the scheduler for the best scheduling strategy.
* @tparam Hint A hint to the scheduler for the best scheduling strategy.
* @param
bhvr
A function implementing the actor's behavior.
* @param
fun
A function implementing the actor's behavior.
* @returns An {@link actor_ptr} to the spawned {@link actor}.
* @returns An {@link actor_ptr} to the spawned {@link actor}.
*/
*/
template
<
scheduling_hint
Hint
>
template
<
scheduling_hint
Hint
>
...
@@ -447,7 +437,7 @@ inline actor_ptr spawn(void_function fun) {
...
@@ -447,7 +437,7 @@ inline actor_ptr spawn(void_function fun) {
* @ingroup ActorManagement
* @ingroup ActorManagement
* @brief Spawns a new context-switching actor,
* @brief Spawns a new context-switching actor,
* equal to <tt>spawn<detached>(bhvr)</tt>.
* equal to <tt>spawn<detached>(bhvr)</tt>.
* @param
bhvr
A function implementing the actor's behavior.
* @param
fun
A function implementing the actor's behavior.
* @returns An {@link actor_ptr} to the spawned {@link actor}.
* @returns An {@link actor_ptr} to the spawned {@link actor}.
*/
*/
inline
actor_ptr
spawn
(
void_function
fun
)
{
inline
actor_ptr
spawn
(
void_function
fun
)
{
...
@@ -493,7 +483,7 @@ inline actor_ptr spawn(Fun fun, Arg0&& arg0, Args&&... args) {
...
@@ -493,7 +483,7 @@ inline actor_ptr spawn(Fun fun, Arg0&& arg0, Args&&... args) {
* <tt>spawn<scheduled>(bhvr, arg0, args...)</tt>.
* <tt>spawn<scheduled>(bhvr, arg0, args...)</tt>.
* @param bhvr A functor implementing the actor's behavior.
* @param bhvr A functor implementing the actor's behavior.
* @param arg0 First argument to @p bhvr.
* @param arg0 First argument to @p bhvr.
* @param args Further argume
tn
s to @p bhvr.
* @param args Further argume
nt
s to @p bhvr.
* @returns An {@link actor_ptr} to the spawned {@link actor}.
* @returns An {@link actor_ptr} to the spawned {@link actor}.
*/
*/
template
<
typename
Fun
,
typename
Arg0
,
typename
...
Args
>
template
<
typename
Fun
,
typename
Arg0
,
typename
...
Args
>
...
@@ -503,17 +493,30 @@ inline actor_ptr spawn(Fun&& fun, Arg0&& arg0, Args&&... args) {
...
@@ -503,17 +493,30 @@ inline actor_ptr spawn(Fun&& fun, Arg0&& arg0, Args&&... args) {
std
::
forward
<
Args
>
(
args
)...);
std
::
forward
<
Args
>
(
args
)...);
}
}
/**
* @ingroup ActorManagement
* @brief Spawns a new actor of type @p ActorImpl.
* @tparam ActorImpl An event-based actor implementation.
* @param args Constructor arguments for @p ActorImpl.
* @returns An {@link actor_ptr} to the spawned {@link actor}.
*/
template
<
class
ActorImpl
,
typename
...
Args
>
template
<
class
ActorImpl
,
typename
...
Args
>
inline
actor_ptr
spawn
(
Args
&&
...
args
)
{
inline
actor_ptr
spawn
(
Args
&&
...
args
)
{
return
spawn
(
new
ActorImpl
(
std
::
forward
<
Args
>
(
args
)...));
return
get_scheduler
()
->
spawn
(
new
ActorImpl
(
std
::
forward
<
Args
>
(
args
)...));
}
inline
actor_ptr
spawn_in_group
(
const
group_ptr
&
grp
,
event_based_actor
*
impl
)
{
return
get_scheduler
()
->
spawn
(
impl
,
[
grp
](
local_actor
*
ptr
)
{
ptr
->
join
(
grp
);
});
}
}
/**
* @ingroup ActorManagement
* @brief Spawns a new context-switching or thread-mapped {@link actor}
* that joins @p grp immediately.
* @note The spawned actor joins @p grp after its
* {@link local_actor::init() init} member function is called but
* before it is executed. Hence, the spawned actor already joined
* the group before this function returns.
* @tparam Hint A hint to the scheduler for the best scheduling strategy.
* @param bhvr A function implementing the actor's behavior.
* @returns An {@link actor_ptr} to the spawned {@link actor}.
*/
template
<
scheduling_hint
Hint
>
template
<
scheduling_hint
Hint
>
inline
actor_ptr
spawn_in_group
(
const
group_ptr
&
grp
,
void_function
fun
)
{
inline
actor_ptr
spawn_in_group
(
const
group_ptr
&
grp
,
void_function
fun
)
{
return
get_scheduler
()
->
spawn
(
std
::
move
(
fun
),
Hint
,
[
grp
](
local_actor
*
ptr
){
return
get_scheduler
()
->
spawn
(
std
::
move
(
fun
),
Hint
,
[
grp
](
local_actor
*
ptr
){
...
@@ -547,7 +550,8 @@ inline actor_ptr spawn_in_group(const group_ptr& grp,
...
@@ -547,7 +550,8 @@ inline actor_ptr spawn_in_group(const group_ptr& grp,
template
<
class
ActorImpl
,
typename
...
Args
>
template
<
class
ActorImpl
,
typename
...
Args
>
inline
actor_ptr
spawn_in_group
(
const
group_ptr
&
grp
,
Args
&&
...
args
)
{
inline
actor_ptr
spawn_in_group
(
const
group_ptr
&
grp
,
Args
&&
...
args
)
{
return
spawn_in_group
(
grp
,
new
ActorImpl
(
std
::
forward
<
Args
>
(
args
)...));
return
get_scheduler
()
->
spawn
(
new
ActorImpl
(
std
::
forward
<
Args
>
(
args
)...),
[
&
grp
](
local_actor
*
ptr
)
{
ptr
->
join
(
grp
);
});
}
}
#ifdef CPPA_DOCUMENTATION
#ifdef CPPA_DOCUMENTATION
...
...
cppa/detail/uniform_type_info_map.hpp
View file @
0d3c0567
...
@@ -50,17 +50,15 @@ class uniform_type_info_map {
...
@@ -50,17 +50,15 @@ class uniform_type_info_map {
public:
public:
typedef
std
::
set
<
std
::
string
>
string_set
;
typedef
std
::
set
<
std
::
string
>
set_type
;
typedef
std
::
map
<
std
::
string
,
uniform_type_info
*>
uti_map_type
;
typedef
std
::
map
<
std
::
string
,
uniform_type_info
*>
uti_map
;
typedef
std
::
map
<
int
,
std
::
pair
<
set_type
,
set_type
>
>
int_map_type
;
typedef
std
::
map
<
int
,
std
::
pair
<
string_set
,
string_set
>
>
int_map
;
uniform_type_info_map
();
uniform_type_info_map
();
~
uniform_type_info_map
();
~
uniform_type_info_map
();
inline
const
int_map
&
int_names
()
const
{
inline
const
int_map
_type
&
int_names
()
const
{
return
m_ints
;
return
m_ints
;
}
}
...
@@ -76,13 +74,13 @@ class uniform_type_info_map {
...
@@ -76,13 +74,13 @@ class uniform_type_info_map {
private:
private:
// maps raw typeid names to uniform type informations
// maps raw typeid names to uniform type informations
uti_map
m_by_rname
;
uti_map
_type
m_by_rname
;
// maps uniform names to uniform type informations
// maps uniform names to uniform type informations
uti_map
m_by_uname
;
uti_map
_type
m_by_uname
;
// maps sizeof(-integer_type-) to { signed-names-set, unsigned-names-set }
// maps sizeof(-integer_type-) to { signed-names-set, unsigned-names-set }
int_map
m_ints
;
int_map
_type
m_ints
;
};
};
...
...
examples/dining_philosophers.cpp
View file @
0d3c0567
...
@@ -175,7 +175,7 @@ int main(int, char**) {
...
@@ -175,7 +175,7 @@ int main(int, char**) {
cout
<<
"chopstick ids:"
;
cout
<<
"chopstick ids:"
;
std
::
vector
<
actor_ptr
>
chopsticks
;
std
::
vector
<
actor_ptr
>
chopsticks
;
for
(
size_t
i
=
0
;
i
<
5
;
++
i
)
{
for
(
size_t
i
=
0
;
i
<
5
;
++
i
)
{
chopsticks
.
push_back
(
spawn
(
new
chopstick
));
chopsticks
.
push_back
(
spawn
<
chopstick
>
(
));
cout
<<
" "
<<
chopsticks
.
back
()
->
id
();
cout
<<
" "
<<
chopsticks
.
back
()
->
id
();
}
}
cout
<<
endl
;
cout
<<
endl
;
...
@@ -185,10 +185,10 @@ int main(int, char**) {
...
@@ -185,10 +185,10 @@ int main(int, char**) {
std
::
vector
<
std
::
string
>
names
=
{
"Plato"
,
"Hume"
,
"Kant"
,
std
::
vector
<
std
::
string
>
names
=
{
"Plato"
,
"Hume"
,
"Kant"
,
"Nietzsche"
,
"Descartes"
};
"Nietzsche"
,
"Descartes"
};
for
(
size_t
i
=
0
;
i
<
5
;
++
i
)
{
for
(
size_t
i
=
0
;
i
<
5
;
++
i
)
{
spawn_in_group
(
dinner_club
,
spawn_in_group
<
philosopher
>
(
dinner_club
,
new
philosopher
(
names
[
i
],
names
[
i
],
chopsticks
[
i
],
chopsticks
[
i
],
chopsticks
[(
i
+
1
)
%
5
])
);
chopsticks
[(
i
+
1
)
%
chopsticks
.
size
()]
);
}
}
// tell philosophers to start thinking
// tell philosophers to start thinking
send
(
dinner_club
,
atom
(
"think"
));
send
(
dinner_club
,
atom
(
"think"
));
...
...
examples/math_actor_example.cpp
View file @
0d3c0567
...
@@ -67,7 +67,7 @@ int main() {
...
@@ -67,7 +67,7 @@ int main() {
// spawn a context-switching actor that invokes math_fun
// spawn a context-switching actor that invokes math_fun
auto
a1
=
spawn
(
math_fun
);
auto
a1
=
spawn
(
math_fun
);
// spawn an event-based math actor
// spawn an event-based math actor
auto
a2
=
spawn
(
new
math_actor
);
auto
a2
=
spawn
<
math_actor
>
(
);
// do some testing on both implementations
// do some testing on both implementations
assert
((
fetch_result
(
a1
,
atom
(
"plus"
),
1
,
2
)
==
3
));
assert
((
fetch_result
(
a1
,
atom
(
"plus"
),
1
,
2
)
==
3
));
assert
((
fetch_result
(
a2
,
atom
(
"plus"
),
1
,
2
)
==
3
));
assert
((
fetch_result
(
a2
,
atom
(
"plus"
),
1
,
2
)
==
3
));
...
...
src/uniform_type_info.cpp
View file @
0d3c0567
...
@@ -739,7 +739,7 @@ bool uniform_type_info_map::insert(const std::set<std::string>& raw_names,
...
@@ -739,7 +739,7 @@ bool uniform_type_info_map::insert(const std::set<std::string>& raw_names,
std
::
vector
<
const
uniform_type_info
*>
uniform_type_info_map
::
get_all
()
const
{
std
::
vector
<
const
uniform_type_info
*>
uniform_type_info_map
::
get_all
()
const
{
std
::
vector
<
const
uniform_type_info
*>
result
;
std
::
vector
<
const
uniform_type_info
*>
result
;
result
.
reserve
(
m_by_uname
.
size
());
result
.
reserve
(
m_by_uname
.
size
());
for
(
const
uti_map
::
value_type
&
i
:
m_by_uname
)
{
for
(
const
uti_map
_type
::
value_type
&
i
:
m_by_uname
)
{
result
.
push_back
(
i
.
second
);
result
.
push_back
(
i
.
second
);
}
}
return
std
::
move
(
result
);
return
std
::
move
(
result
);
...
...
unit_testing/ping_pong.cpp
View file @
0d3c0567
...
@@ -63,7 +63,7 @@ actor_ptr spawn_event_based_ping(size_t num_pings) {
...
@@ -63,7 +63,7 @@ actor_ptr spawn_event_based_ping(size_t num_pings) {
);
);
}
}
};
};
return
spawn
(
new
impl
{
num_pings
}
);
return
spawn
<
impl
>
(
num_pings
);
}
}
void
pong
(
actor_ptr
ping_actor
)
{
void
pong
(
actor_ptr
ping_actor
)
{
...
@@ -102,7 +102,7 @@ actor_ptr spawn_event_based_pong(actor_ptr ping_actor) {
...
@@ -102,7 +102,7 @@ actor_ptr spawn_event_based_pong(actor_ptr ping_actor) {
);
);
}
}
};
};
auto
pptr
=
spawn
(
new
impl
);
auto
pptr
=
spawn
<
impl
>
(
);
// kickoff
// kickoff
ping_actor
->
enqueue
(
pptr
.
get
(),
make_any_tuple
(
atom
(
"pong"
),
0
));
ping_actor
->
enqueue
(
pptr
.
get
(),
make_any_tuple
(
atom
(
"pong"
),
0
));
return
pptr
;
return
pptr
;
...
...
unit_testing/test__spawn.cpp
View file @
0d3c0567
...
@@ -137,7 +137,7 @@ class event_testee : public sb_actor<event_testee> {
...
@@ -137,7 +137,7 @@ class event_testee : public sb_actor<event_testee> {
#endif
#endif
// quits after 5 timeouts
// quits after 5 timeouts
event_based_actor
*
event_testee2
()
{
actor_ptr
spawn_
event_testee2
()
{
struct
impl
:
sb_actor
<
impl
>
{
struct
impl
:
sb_actor
<
impl
>
{
behavior
wait4timeout
(
int
remaining
)
{
behavior
wait4timeout
(
int
remaining
)
{
return
(
return
(
...
@@ -152,7 +152,7 @@ event_based_actor* event_testee2() {
...
@@ -152,7 +152,7 @@ event_based_actor* event_testee2() {
impl
()
:
init_state
(
wait4timeout
(
5
))
{
}
impl
()
:
init_state
(
wait4timeout
(
5
))
{
}
};
};
return
new
impl
;
return
spawn
<
impl
>
()
;
}
}
struct
chopstick
:
public
sb_actor
<
chopstick
>
{
struct
chopstick
:
public
sb_actor
<
chopstick
>
{
...
@@ -458,7 +458,7 @@ size_t test__spawn() {
...
@@ -458,7 +458,7 @@ size_t test__spawn() {
CPPA_IF_VERBOSE
(
cout
<<
"ok"
<<
endl
);
CPPA_IF_VERBOSE
(
cout
<<
"ok"
<<
endl
);
CPPA_IF_VERBOSE
(
cout
<<
"event_testee2 ... "
<<
std
::
flush
);
CPPA_IF_VERBOSE
(
cout
<<
"event_testee2 ... "
<<
std
::
flush
);
spawn
(
event_testee2
()
);
spawn
_event_testee2
(
);
await_all_others_done
();
await_all_others_done
();
CPPA_IF_VERBOSE
(
cout
<<
"ok"
<<
endl
);
CPPA_IF_VERBOSE
(
cout
<<
"ok"
<<
endl
);
...
...
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