Skip to content

Commit 66ba6fc

Browse files
authored
Merge pull request #264 from Joe7M/master
COMMON: Fix bug DELAY(0)
2 parents 78a80a0 + 4830f0c commit 66ba6fc

4 files changed

Lines changed: 24 additions & 16 deletions

File tree

src/common/blib.c

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2046,11 +2046,13 @@ void cmd_randomize() {
20462046
* DELAY
20472047
*/
20482048
void cmd_delay() {
2049-
uint32_t ms = par_getint();
2049+
int32_t ms = par_getint();
20502050
if (prog_error) {
20512051
return;
20522052
}
2053-
dev_delay(ms);
2053+
if (ms > 0) {
2054+
dev_delay(ms);
2055+
}
20542056
}
20552057

20562058
/**

src/platform/android/jni/runtime.cpp

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -880,7 +880,8 @@ void Runtime::pause(int timeout) {
880880
delete event;
881881
}
882882
} else {
883-
uint32_t startTime = dev_get_millisecond_count();
883+
int slept;
884+
int now = dev_get_millisecond_count();
884885
while (true) {
885886
pollEvents(false);
886887
if (isBreak()) {
@@ -890,8 +891,11 @@ void Runtime::pause(int timeout) {
890891
processEvent(*event);
891892
delete event;
892893
}
893-
usleep(1000);
894-
if (timeout > 0 && (dev_get_millisecond_count() - startTime) > timeout) {
894+
slept = dev_get_millisecond_count() - now;
895+
if (timeout - slept > WAIT_INTERVAL) {
896+
usleep(WAIT_INTERVAL * 1000);
897+
} else {
898+
usleep((timeout - slept) * 1000);
895899
break;
896900
}
897901
}

src/platform/console/device.cpp

Lines changed: 6 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -444,18 +444,17 @@ int osd_textheight(const char *str) {
444444
// delay while pumping events
445445
//
446446
void dev_delay(uint32_t timeout) {
447-
uint32_t slept = 0;
447+
uint32_t slept;
448448
uint32_t now = dev_get_millisecond_count();
449449
while (1) {
450450
if (osd_events(0) < 0) {
451451
break;
452452
}
453-
if (dev_get_millisecond_count() - now > timeout) {
454-
break;
455-
}
456-
usleep(WAIT_INTERVAL * 1000);
457-
slept += WAIT_INTERVAL;
458-
if (timeout > 0 && slept > timeout) {
453+
slept = dev_get_millisecond_count() - now;
454+
if (timeout - slept > WAIT_INTERVAL) {
455+
usleep(WAIT_INTERVAL * 1000);
456+
} else {
457+
usleep((timeout - slept) * 1000);
459458
break;
460459
}
461460
}

src/platform/sdl/runtime.cpp

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -412,7 +412,8 @@ void Runtime::pause(int timeout) {
412412
delete event;
413413
}
414414
} else {
415-
int slept = 0;
415+
int slept;
416+
int now = dev_get_millisecond_count();
416417
while (true) {
417418
pollEvents(false);
418419
if (isBreak()) {
@@ -422,9 +423,11 @@ void Runtime::pause(int timeout) {
422423
processEvent(*event);
423424
delete event;
424425
}
425-
usleep(WAIT_INTERVAL * 1000);
426-
slept += WAIT_INTERVAL;
427-
if (timeout > 0 && slept > timeout) {
426+
slept = dev_get_millisecond_count() - now;
427+
if (timeout - slept > WAIT_INTERVAL) {
428+
usleep(WAIT_INTERVAL * 1000);
429+
} else {
430+
usleep((timeout - slept) * 1000);
428431
break;
429432
}
430433
}

0 commit comments

Comments
 (0)