1e66f31c5Sopenharmony_ci#include <stdio.h> 2e66f31c5Sopenharmony_ci#include <stdlib.h> 3e66f31c5Sopenharmony_ci#include <unistd.h> 4e66f31c5Sopenharmony_ci 5e66f31c5Sopenharmony_ci#include <uv.h> 6e66f31c5Sopenharmony_ci 7e66f31c5Sopenharmony_ciuv_loop_t *loop; 8e66f31c5Sopenharmony_ciuv_async_t async; 9e66f31c5Sopenharmony_ci 10e66f31c5Sopenharmony_cidouble percentage; 11e66f31c5Sopenharmony_ci 12e66f31c5Sopenharmony_civoid fake_download(uv_work_t *req) { 13e66f31c5Sopenharmony_ci int size = *((int*) req->data); 14e66f31c5Sopenharmony_ci int downloaded = 0; 15e66f31c5Sopenharmony_ci while (downloaded < size) { 16e66f31c5Sopenharmony_ci percentage = downloaded*100.0/size; 17e66f31c5Sopenharmony_ci async.data = (void*) &percentage; 18e66f31c5Sopenharmony_ci uv_async_send(&async); 19e66f31c5Sopenharmony_ci 20e66f31c5Sopenharmony_ci sleep(1); 21e66f31c5Sopenharmony_ci downloaded += (200+random())%1000; // can only download max 1000bytes/sec, 22e66f31c5Sopenharmony_ci // but at least a 200; 23e66f31c5Sopenharmony_ci } 24e66f31c5Sopenharmony_ci} 25e66f31c5Sopenharmony_ci 26e66f31c5Sopenharmony_civoid after(uv_work_t *req, int status) { 27e66f31c5Sopenharmony_ci fprintf(stderr, "Download complete\n"); 28e66f31c5Sopenharmony_ci uv_close((uv_handle_t*) &async, NULL); 29e66f31c5Sopenharmony_ci} 30e66f31c5Sopenharmony_ci 31e66f31c5Sopenharmony_civoid print_progress(uv_async_t *handle) { 32e66f31c5Sopenharmony_ci double percentage = *((double*) handle->data); 33e66f31c5Sopenharmony_ci fprintf(stderr, "Downloaded %.2f%%\n", percentage); 34e66f31c5Sopenharmony_ci} 35e66f31c5Sopenharmony_ci 36e66f31c5Sopenharmony_ciint main() { 37e66f31c5Sopenharmony_ci loop = uv_default_loop(); 38e66f31c5Sopenharmony_ci 39e66f31c5Sopenharmony_ci uv_work_t req; 40e66f31c5Sopenharmony_ci int size = 10240; 41e66f31c5Sopenharmony_ci req.data = (void*) &size; 42e66f31c5Sopenharmony_ci 43e66f31c5Sopenharmony_ci uv_async_init(loop, &async, print_progress); 44e66f31c5Sopenharmony_ci uv_queue_work(loop, &req, fake_download, after); 45e66f31c5Sopenharmony_ci 46e66f31c5Sopenharmony_ci return uv_run(loop, UV_RUN_DEFAULT); 47e66f31c5Sopenharmony_ci} 48