mirror of
https://gitee.com/Lyon1998/pikapython.git
synced 2025-01-29 17:22:56 +08:00
support yiled from time.sleep()
This commit is contained in:
parent
33cc4aacce
commit
d9925cab7c
@ -4,10 +4,6 @@ from PikaObj import *
|
||||
def __init__(self): ...
|
||||
|
||||
|
||||
def sleep(self, s: float):
|
||||
"""Sleep for s seconds."""
|
||||
|
||||
|
||||
@PIKA_C_MACRO_IF("PIKA_STD_DEVICE_UNIX_TIME_ENABLE")
|
||||
def time(self) -> float:
|
||||
"""Get the current time."""
|
||||
|
@ -7,23 +7,23 @@
|
||||
#include <windows.h>
|
||||
#endif
|
||||
|
||||
void _time_sleep_ms(PikaObj* self, int ms) {
|
||||
#if defined(__linux)
|
||||
usleep(ms * 1000);
|
||||
#elif defined(_WIN32)
|
||||
Sleep(ms);
|
||||
#else
|
||||
__platform_sleep_ms(ms);
|
||||
#endif
|
||||
void (*global_do_sleep_ms)(uint32_t);
|
||||
|
||||
static void _do_sleep_ms_tick(uint32_t ms) {
|
||||
uint32_t tick = pika_platform_getTick();
|
||||
while (pika_platform_getTick() - tick < ms) {
|
||||
_pikaVM_yiled();
|
||||
}
|
||||
}
|
||||
|
||||
void _time_sleep_ms(PikaObj* self, int ms) {
|
||||
global_do_sleep_ms(ms);
|
||||
}
|
||||
|
||||
void _time_sleep_s(PikaObj* self, int s) {
|
||||
#if defined(__linux)
|
||||
sleep(s);
|
||||
#elif defined(_WIN32)
|
||||
Sleep(s * 1000);
|
||||
#else
|
||||
__platform_sleep_s(s);
|
||||
#endif
|
||||
for (int i = 0; i < s; i++) {
|
||||
_time_sleep_ms(self, 1000);
|
||||
}
|
||||
}
|
||||
|
||||
void _time_platformGetTick(PikaObj* self) {
|
||||
@ -701,12 +701,10 @@ void _time___init__(PikaObj* self) {
|
||||
obj_setInt(self, "locale", 8);
|
||||
time_localtime(0.0, &this_tm, 8);
|
||||
time_set_tm_value(self, &this_tm);
|
||||
if (-1 == pika_platform_getTick()) {
|
||||
global_do_sleep_ms = pika_platform_sleep_ms;
|
||||
} else {
|
||||
global_do_sleep_ms = _do_sleep_ms_tick;
|
||||
}
|
||||
#endif
|
||||
}
|
||||
|
||||
void _time_sleep(PikaObj* self, pika_float s) {
|
||||
Args* args = New_args(NULL);
|
||||
args_setInt(args, "ms", s * 1000);
|
||||
obj_runNativeMethod(self, "sleep_ms", args);
|
||||
args_deinit(args);
|
||||
}
|
||||
|
@ -2,7 +2,9 @@ import _time
|
||||
|
||||
|
||||
def sleep(s: float):
|
||||
return _time.sleep(s)
|
||||
for i in range(int(s)):
|
||||
_time.sleep_s(1)
|
||||
_time.sleep_ms(int((s - int(s)) * 1000))
|
||||
|
||||
|
||||
def sleep_s(s: int):
|
||||
|
@ -91,7 +91,9 @@ PIKA_WEAK int64_t pika_platform_getTick(void) {
|
||||
#if PIKA_FREERTOS_ENABLE
|
||||
return platform_uptime_ms();
|
||||
#elif defined(__linux)
|
||||
return time(NULL);
|
||||
struct timespec ts;
|
||||
clock_gettime(CLOCK_MONOTONIC, &ts);
|
||||
return (ts.tv_sec * 1000 + ts.tv_nsec / 1000000);
|
||||
#else
|
||||
return -1;
|
||||
#endif
|
||||
@ -293,17 +295,16 @@ PIKA_WEAK void pika_platform_thread_delay(void) {
|
||||
}
|
||||
|
||||
PIKA_WEAK void pika_platform_sleep_ms(uint32_t ms) {
|
||||
#if defined(__linux)
|
||||
usleep(ms * 1000);
|
||||
#elif defined(_WIN32)
|
||||
Sleep(ms);
|
||||
#else
|
||||
pika_platform_printf(
|
||||
"Error: pika_platform_sleep_ms need implementation!\r\n");
|
||||
while (1) {
|
||||
}
|
||||
}
|
||||
|
||||
PIKA_WEAK void pika_platform_sleep_s(uint32_t s) {
|
||||
/* sleep_ms */
|
||||
pika_platform_sleep_ms(s * 1000);
|
||||
while (1) {
|
||||
}
|
||||
#endif
|
||||
}
|
||||
|
||||
/* Thread Support */
|
||||
@ -468,7 +469,7 @@ PIKA_WEAK void pika_platform_thread_timer_init(pika_platform_timer_t* timer) {
|
||||
}
|
||||
|
||||
PIKA_WEAK void pika_platform_thread_timer_cutdown(pika_platform_timer_t* timer,
|
||||
unsigned int timeout) {
|
||||
unsigned int timeout) {
|
||||
#ifdef __linux
|
||||
struct timeval now;
|
||||
gettimeofday(&now, NULL);
|
||||
@ -482,7 +483,8 @@ PIKA_WEAK void pika_platform_thread_timer_cutdown(pika_platform_timer_t* timer,
|
||||
#endif
|
||||
}
|
||||
|
||||
PIKA_WEAK char pika_platform_thread_timer_is_expired(pika_platform_timer_t* timer) {
|
||||
PIKA_WEAK char pika_platform_thread_timer_is_expired(
|
||||
pika_platform_timer_t* timer) {
|
||||
#ifdef __linux
|
||||
struct timeval now, res;
|
||||
gettimeofday(&now, NULL);
|
||||
|
@ -179,7 +179,6 @@ void pika_platform_thread_delay(void);
|
||||
int64_t pika_platform_getTick(void);
|
||||
|
||||
void pika_platform_sleep_ms(uint32_t ms);
|
||||
void pika_platform_sleep_s(uint32_t s);
|
||||
|
||||
void pika_hook_instruct(void);
|
||||
PIKA_BOOL pika_hook_arg_cache_filter(void* self);
|
||||
|
@ -3575,3 +3575,7 @@ PikaObj* pikaVM_runFile(PikaObj* self, char* file_name) {
|
||||
strsDeinit(&buffs);
|
||||
return self;
|
||||
}
|
||||
|
||||
void _pikaVM_yiled(void){
|
||||
// pika_platform_printf("yiled\r\n");
|
||||
}
|
||||
|
@ -313,4 +313,5 @@ PIKA_RES __eventListener_pushEvent(PikaEventListener* lisener,
|
||||
Arg* eventData);
|
||||
int _VMEvent_getVMCnt(void);
|
||||
void _VMEvent_pickupEvent(void);
|
||||
void _pikaVM_yiled(void);
|
||||
#endif
|
||||
|
Loading…
x
Reference in New Issue
Block a user