Toggle navigation
Toggle navigation
此项目
正在载入...
Sign in
胡斌
/
srs
转到一个项目
Toggle navigation
项目
群组
代码片段
帮助
Toggle navigation pinning
Project
Activity
Repository
Pipelines
Graphs
Issues
0
Merge Requests
0
Wiki
Network
Create a new issue
Builds
Commits
Authored by
winlin
2015-09-17 11:57:17 +0800
Browse Files
Options
Browse Files
Download
Email Patches
Plain Diff
Commit
7b2b11e932032b2bd5033ca2af4368bb87e794db
7b2b11e9
1 parent
087f7740
async call worker fast execute tasks.
隐藏空白字符变更
内嵌
并排对比
正在显示
3 个修改的文件
包含
30 行增加
和
9 行删除
trunk/auto/auto_headers.sh
trunk/src/app/srs_app_async_call.cpp
trunk/src/app/srs_app_async_call.hpp
trunk/auto/auto_headers.sh
100755 → 100644
查看文件 @
7b2b11e
...
...
@@ -257,7 +257,9 @@ echo "\"" >> $SRS_AUTO_HEADERS_H
# new empty line to auto headers file.
echo
""
>>
$SRS_AUTO_HEADERS_H
#####################################################################################
# auto header EOF.
#####################################################################################
echo
"#endif"
>>
$SRS_AUTO_HEADERS_H
echo
""
>>
$SRS_AUTO_HEADERS_H
...
...
trunk/src/app/srs_app_async_call.cpp
查看文件 @
7b2b11e
...
...
@@ -42,6 +42,7 @@ ISrsAsyncCallTask::~ISrsAsyncCallTask()
SrsAsyncCallWorker
::
SrsAsyncCallWorker
()
{
pthread
=
new
SrsReusableThread
(
"async"
,
this
,
SRS_AUTO_ASYNC_CALLBACL_SLEEP_US
);
wait
=
st_cond_new
();
}
SrsAsyncCallWorker
::~
SrsAsyncCallWorker
()
...
...
@@ -54,6 +55,8 @@ SrsAsyncCallWorker::~SrsAsyncCallWorker()
srs_freep
(
task
);
}
tasks
.
clear
();
st_cond_destroy
(
wait
);
}
int
SrsAsyncCallWorker
::
execute
(
ISrsAsyncCallTask
*
t
)
...
...
@@ -61,10 +64,16 @@ int SrsAsyncCallWorker::execute(ISrsAsyncCallTask* t)
int
ret
=
ERROR_SUCCESS
;
tasks
.
push_back
(
t
);
st_cond_signal
(
wait
);
return
ret
;
}
int
SrsAsyncCallWorker
::
count
()
{
return
(
int
)
tasks
.
size
();
}
int
SrsAsyncCallWorker
::
start
()
{
return
pthread
->
start
();
...
...
@@ -72,23 +81,30 @@ int SrsAsyncCallWorker::start()
void
SrsAsyncCallWorker
::
stop
()
{
st_cond_signal
(
wait
);
pthread
->
stop
();
}
int
SrsAsyncCallWorker
::
cycle
()
{
int
ret
=
ERROR_SUCCESS
;
std
::
vector
<
ISrsAsyncCallTask
*>
copies
=
tasks
;
tasks
.
clear
();
std
::
vector
<
ISrsAsyncCallTask
*>::
iterator
it
;
for
(
it
=
copies
.
begin
();
it
!=
copies
.
end
();
++
it
)
{
ISrsAsyncCallTask
*
task
=
*
it
;
if
((
ret
=
task
->
call
())
!=
ERROR_SUCCESS
)
{
srs_warn
(
"ignore async callback %s, ret=%d"
,
task
->
to_string
().
c_str
(),
ret
);
while
(
pthread
->
can_loop
())
{
if
(
tasks
.
empty
())
{
st_cond_wait
(
wait
);
}
std
::
vector
<
ISrsAsyncCallTask
*>
copies
=
tasks
;
tasks
.
clear
();
std
::
vector
<
ISrsAsyncCallTask
*>::
iterator
it
;
for
(
it
=
copies
.
begin
();
it
!=
copies
.
end
();
++
it
)
{
ISrsAsyncCallTask
*
task
=
*
it
;
if
((
ret
=
task
->
call
())
!=
ERROR_SUCCESS
)
{
srs_warn
(
"ignore async callback %s, ret=%d"
,
task
->
to_string
().
c_str
(),
ret
);
}
srs_freep
(
task
);
}
srs_freep
(
task
);
}
return
ret
;
...
...
trunk/src/app/srs_app_async_call.hpp
查看文件 @
7b2b11e
...
...
@@ -70,12 +70,15 @@ class SrsAsyncCallWorker : public ISrsReusableThreadHandler
{
private
:
SrsReusableThread
*
pthread
;
protected
:
std
::
vector
<
ISrsAsyncCallTask
*>
tasks
;
st_cond_t
wait
;
public
:
SrsAsyncCallWorker
();
virtual
~
SrsAsyncCallWorker
();
public
:
virtual
int
execute
(
ISrsAsyncCallTask
*
t
);
virtual
int
count
();
public
:
virtual
int
start
();
virtual
void
stop
();
...
...
请
注册
或
登录
后发表评论