/* if different owner starts existing startjob, it suspends itself */ void WM_jobs_start(wmWindowManager *wm, wmJob *wm_job) { if (wm_job->running) { /* signal job to end and restart */ wm_job->stop = TRUE; // printf("job started a running job, ending... %s\n", wm_job->name); } else { if (wm_job->customdata && wm_job->startjob) { wm_jobs_test_suspend_stop(wm, wm_job); if (wm_job->suspended == FALSE) { /* copy to ensure proper free in end */ wm_job->run_customdata = wm_job->customdata; wm_job->run_free = wm_job->free; wm_job->free = NULL; wm_job->customdata = NULL; wm_job->running = TRUE; if (wm_job->initjob) wm_job->initjob(wm_job->run_customdata); wm_job->stop = FALSE; wm_job->ready = FALSE; wm_job->progress = 0.0; // printf("job started: %s\n", wm_job->name); BLI_init_threads(&wm_job->threads, do_job_thread, 1); BLI_insert_thread(&wm_job->threads, wm_job); } /* restarted job has timer already */ if (wm_job->wt == NULL) wm_job->wt = WM_event_add_timer(wm, wm_job->win, TIMERJOBS, wm_job->timestep); if (G.debug & G_DEBUG_JOBS) wm_job->start_time = PIL_check_seconds_timer(); } else { printf("job fails, not initialized\n"); } } }
/* if different owner starts existing startjob, it suspends itself */ void WM_jobs_start(wmWindowManager *wm, wmJob *steve) { if(steve->running) { /* signal job to end and restart */ steve->stop= 1; // printf("job started a running job, ending... %s\n", steve->name); } else { if(steve->customdata && steve->startjob) { wm_jobs_test_suspend_stop(wm, steve); if(steve->suspended==0) { /* copy to ensure proper free in end */ steve->run_customdata= steve->customdata; steve->run_free= steve->free; steve->free= NULL; steve->customdata= NULL; steve->running= 1; if(steve->initjob) steve->initjob(steve->run_customdata); steve->stop= 0; steve->ready= 0; steve->progress= 0.0; // printf("job started: %s\n", steve->name); BLI_init_threads(&steve->threads, do_job_thread, 1); BLI_insert_thread(&steve->threads, steve); } /* restarted job has timer already */ if(steve->wt==NULL) steve->wt= WM_event_add_timer(wm, steve->win, TIMERJOBS, steve->timestep); } else printf("job fails, not initialized\n"); } }