void WorkThread::run() { QString msg = QStringLiteral("运行中"); int count = 0; while( /*control_status*/ true) { QString temp = msg; count++; QString temp2; temp2.setNum(count); // 发送消息 QString msg = temp + temp2; emitMsg(msg); work_run(); sleep(8); } }
static void* readerfunc(void *p) { pthread_barrier_wait(&start); work_t* work = (work_t*) p; while (!done) { pthread_rwlock_rdlock(&rwlock); if (!done) { work_run(work, MICROS_PER_SECOND); } pthread_rwlock_unlock(&rwlock); } }
static void* writerfunc(void *p) { pthread_barrier_wait(&start); work_t* work = (work_t*) p; while (!done) { pthread_rwlock_wrlock(&rwlock); if (!done) { work_run(work, MICROS_PER_SECOND / 100); } pthread_rwlock_unlock(&rwlock); usleep(MICROS_PER_SECOND / 10); } }
void sequential_demo(int work_count, work_t* works, int seconds_per_work) { PRINT("*** SEQUENTIAL DEMO ***\n\n"); EXPLAIN(" I'm going to run %d works sequentially, one after another.\n", work_count); EXPLAIN(" Each work will run for %d seconds.\n\n", seconds_per_work); int i; for (i = 0; i < work_count; ++i) { work_explain(&works[i]); PAUSE("Press [Enter] to start this work...\n"); REF("Estimated resource usage for the following %d seconds\n", seconds_per_work); REF("CPU usage:\n"); REF("\tuser: about %d%%\n", 100 * usrcpu_usage(1, &works[i]) / cpucount()); REF("\tsystem: about %d%%\n", 100 * syscpu_usage(1, &works[i]) / cpucount()); REF("Memory usage:\n"); REF("\t%ld bytes\n", mem_usage(1, &works[i])); REF("Thread usage:\n"); REF("\ttotal: 1\n"); REF("\tlocked: 0\n\n"); work_run(&works[i], seconds_per_work * MICROS_PER_SECOND); PRINT("\n"); } }
static void* join_threadfunc(void *p) { pthread_barrier_wait(&start); work_t* work = (work_t*) p; work_run(work, 5 * (1 + work->id) * MICROS_PER_SECOND); }