Skip to content
GitLab
Projects
Groups
Snippets
/
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
Menu
Open sidebar
recolic-hust
hust-x86-simulator
Commits
eb60a1a2
Commit
eb60a1a2
authored
Jan 01, 2020
by
Recolic Keghart
Browse files
Temporarily disable async
parent
ce18d37b
Pipeline
#815
passed with stages
in 10 minutes and 55 seconds
Changes
2
Pipelines
1
Hide whitespace changes
Inline
Side-by-side
nemu/src/device/device.cc
View file @
eb60a1a2
...
...
@@ -40,9 +40,12 @@ static void timer_sig_handler(int signum) {
Assert
(
ret
==
0
,
"Can not set timer"
);
}
void
device_update
()
{}
// Now an independent thread will do it.
void
device_update_impl
()
{
// async
if
(
device_update_flag
)
device_update_flag
=
false
;
else
return
;
if
(
update_screen_flag
)
{
update_screen
();
update_screen_flag
=
false
;
...
...
@@ -72,6 +75,8 @@ void device_update_impl() {
}
}
void
device_update
()
{
device_update_impl
();}
static
void
device_update_thread_daemon
()
{
while
(
true
)
{
if
(
device_update_flag
.
exchange
(
false
))
{
...
...
@@ -104,7 +109,7 @@ void init_device() {
ret
=
setitimer
(
ITIMER_VIRTUAL
,
&
it
,
NULL
);
Assert
(
ret
==
0
,
"Can not set timer"
);
std
::
thread
(
device_update_thread_daemon
).
detach
();
//
std::thread(device_update_thread_daemon).detach();
}
#else
...
...
nemu/src/device/vga.cc
View file @
eb60a1a2
...
...
@@ -19,9 +19,11 @@ static uint32_t (*vmem) [SCREEN_W];
static
uint32_t
*
screensize_port_base
;
inline
void
SDL_ErrorCheck
(
int
ret
)
{
#ifdef DEBUG
if
(
ret
!=
0
)
{
rlib
::
println
(
"SDL_Error: ret="
,
ret
,
", GETERR="
,
SDL_GetError
());
}
#endif
}
static
void
init_vga_impl
()
{
...
...
@@ -38,7 +40,7 @@ static void init_vga_impl() {
void
update_screen
()
{
#ifndef DISABLE_MMIO
if
(
window
==
nullptr
)
init_vga_impl
();
//
if(window == nullptr) init_vga_impl();
SDL_ErrorCheck
(
SDL_UpdateTexture
(
texture
,
NULL
,
vmem
,
SCREEN_W
*
sizeof
(
vmem
[
0
][
0
])));
SDL_ErrorCheck
(
SDL_RenderClear
(
renderer
));
SDL_ErrorCheck
(
SDL_RenderCopy
(
renderer
,
texture
,
NULL
,
NULL
));
...
...
@@ -49,6 +51,7 @@ void update_screen() {
void
init_vga
()
{
// Because of fucking SDL design, vga_init should be done in updating thread.
// Do nothing in main thread.
init_vga_impl
();
}
#endif
/* HAS_IOE */
Write
Preview
Supports
Markdown
0%
Try again
or
attach a new 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