mirror of
https://github.com/DreamMaoMao/maomaowm.git
synced 2025-10-29 05:40:21 -04:00
opt: mmsg delay after request
This commit is contained in:
parent
a9e9ad905f
commit
a2fa8346f4
1 changed files with 37 additions and 32 deletions
69
mmsg/mmsg.c
69
mmsg/mmsg.c
|
|
@ -308,6 +308,41 @@ static void dwl_ipc_output_askconfirm(void *data,
|
||||||
printf("askconfirm %d\n", askconfirm);
|
printf("askconfirm %d\n", askconfirm);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void wait_request_completed(void) {
|
||||||
|
struct timespec start;
|
||||||
|
clock_gettime(CLOCK_MONOTONIC, &start);
|
||||||
|
starttimestamp = (uint32_t)(start.tv_sec * 1000 +
|
||||||
|
start.tv_nsec / 1000000); // 毫秒时间戳
|
||||||
|
|
||||||
|
int display_fd = wl_display_get_fd(display);
|
||||||
|
struct pollfd pfd = {.fd = display_fd, .events = POLLIN};
|
||||||
|
|
||||||
|
while (request_completed > starttimestamp) {
|
||||||
|
// 非阻塞地检查事件
|
||||||
|
wl_display_dispatch_pending(display);
|
||||||
|
wl_display_flush(display);
|
||||||
|
|
||||||
|
if (request_completed)
|
||||||
|
break;
|
||||||
|
|
||||||
|
// 使用poll等待事件,超时时间为1000毫秒
|
||||||
|
int poll_ret = poll(&pfd, 1, 1000);
|
||||||
|
if (poll_ret == 0) {
|
||||||
|
fprintf(stderr, "CLIENT: Timeout waiting for confirmation\n");
|
||||||
|
break;
|
||||||
|
} else if (poll_ret < 0) {
|
||||||
|
perror("poll");
|
||||||
|
break;
|
||||||
|
} else {
|
||||||
|
// 有事件到达,调用wl_display_dispatch来处理事件
|
||||||
|
if (wl_display_dispatch(display) < 0) {
|
||||||
|
fprintf(stderr, "CLIENT: wl_display_dispatch failed\n");
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
static void dwl_ipc_output_frame(void *data,
|
static void dwl_ipc_output_frame(void *data,
|
||||||
struct zdwl_ipc_output_v2 *dwl_ipc_output) {
|
struct zdwl_ipc_output_v2 *dwl_ipc_output) {
|
||||||
if (mode & SET) {
|
if (mode & SET) {
|
||||||
|
|
@ -385,38 +420,8 @@ static void dwl_ipc_output_frame(void *data,
|
||||||
dispatch_arg3, dispatch_arg4, dispatch_arg5);
|
dispatch_arg3, dispatch_arg4, dispatch_arg5);
|
||||||
}
|
}
|
||||||
wl_display_flush(display);
|
wl_display_flush(display);
|
||||||
struct timespec start;
|
// wait_request_completed();
|
||||||
clock_gettime(CLOCK_MONOTONIC, &start);
|
usleep(1000);
|
||||||
starttimestamp = (uint32_t)(start.tv_sec * 1000 +
|
|
||||||
start.tv_nsec / 1000000); // 毫秒时间戳
|
|
||||||
|
|
||||||
int display_fd = wl_display_get_fd(display);
|
|
||||||
struct pollfd pfd = {.fd = display_fd, .events = POLLIN};
|
|
||||||
|
|
||||||
while (request_completed > starttimestamp) {
|
|
||||||
// 非阻塞地检查事件
|
|
||||||
wl_display_dispatch_pending(display);
|
|
||||||
wl_display_flush(display);
|
|
||||||
|
|
||||||
if (request_completed)
|
|
||||||
break;
|
|
||||||
|
|
||||||
// 使用poll等待事件,超时时间为1000毫秒
|
|
||||||
int poll_ret = poll(&pfd, 1, 1000);
|
|
||||||
if (poll_ret == 0) {
|
|
||||||
fprintf(stderr, "CLIENT: Timeout waiting for confirmation\n");
|
|
||||||
break;
|
|
||||||
} else if (poll_ret < 0) {
|
|
||||||
perror("poll");
|
|
||||||
break;
|
|
||||||
} else {
|
|
||||||
// 有事件到达,调用wl_display_dispatch来处理事件
|
|
||||||
if (wl_display_dispatch(display) < 0) {
|
|
||||||
fprintf(stderr, "CLIENT: wl_display_dispatch failed\n");
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
exit(0);
|
exit(0);
|
||||||
} else {
|
} else {
|
||||||
if (tflag) {
|
if (tflag) {
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue