本文整理汇总了C++中dt_pthread_mutex_lock函数的典型用法代码示例。如果您正苦于以下问题:C++ dt_pthread_mutex_lock函数的具体用法?C++ dt_pthread_mutex_lock怎么用?C++ dt_pthread_mutex_lock使用的例子?那么恭喜您, 这里精选的函数代码示例或许可以为您提供帮助。
在下文中一共展示了dt_pthread_mutex_lock函数的20个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于我们的系统推荐出更棒的C++代码示例。
示例1: dt_lua_lock
void dt_lua_lock()
{
if(!darktable.lua_state.ending && pthread_equal(darktable.control->gui_thread, pthread_self()) != 0)
{
dt_print(DT_DEBUG_LUA, "LUA WARNING locking from the gui thread should be avoided\n");
//g_assert(false);
}
dt_pthread_mutex_lock(&darktable.lua_state.mutex);
}
开发者ID:idvr,项目名称:darktable,代码行数:10,代码来源:lua.c
示例2: _dt_ctl_log_message_timeout_callback
static gboolean _dt_ctl_log_message_timeout_callback(gpointer data)
{
dt_pthread_mutex_lock(&darktable.control->log_mutex);
if(darktable.control->log_ack != darktable.control->log_pos)
darktable.control->log_ack = (darktable.control->log_ack + 1) % DT_CTL_LOG_SIZE;
darktable.control->log_message_timeout_id = 0;
dt_pthread_mutex_unlock(&darktable.control->log_mutex);
dt_control_queue_redraw_center();
return FALSE;
}
开发者ID:fhrtms,项目名称:darktable,代码行数:10,代码来源:control.c
示例3: dt_control_progress_set_progress
void dt_control_progress_set_progress(dt_control_t *control, dt_progress_t *progress, double value)
{
// set the value
dt_pthread_mutex_lock(&progress->mutex);
progress->progress = value;
dt_pthread_mutex_unlock(&progress->mutex);
// tell the gui
dt_pthread_mutex_lock(&control->progress_system.mutex);
if(control->progress_system.proxy.module != NULL)
control->progress_system.proxy.updated(control->progress_system.proxy.module, progress->gui_data, value);
dt_pthread_mutex_unlock(&control->progress_system.mutex);
#ifdef HAVE_UNITY
if(progress->has_progress_bar)
unity_launcher_entry_set_progress(progress->darktable_launcher, CLAMP(value, 0, 1.0));
#endif
}
开发者ID:Coshibu,项目名称:darktable,代码行数:19,代码来源:progress.c
示例4: dt_lua_init_lock
void dt_lua_init_lock()
{
pthread_mutexattr_t a;
pthread_mutexattr_init(&a);
pthread_mutexattr_settype(&a, PTHREAD_MUTEX_RECURSIVE);
dt_pthread_mutex_init(&darktable.lua_state.mutex, &a);
pthread_mutexattr_destroy(&a);
// we want our lock initialized locked
dt_pthread_mutex_lock(&darktable.lua_state.mutex);
}
开发者ID:WhiteSymmetry,项目名称:darktable,代码行数:10,代码来源:lua.c
示例5: dt_dev_module_remove
void dt_dev_module_remove(dt_develop_t *dev, dt_iop_module_t *module)
{
//if(darktable.gui->reset) return;
dt_pthread_mutex_lock(&dev->history_mutex);
int del = 0;
if(dev->gui_attached)
{
int nb = g_list_length(dev->history);
int pos = 0;
for (int i=0; i<nb; i++)
{
GList *elem = g_list_nth(dev->history,pos);
dt_dev_history_item_t *hist = (dt_dev_history_item_t *)(elem->data);
if (module->instance == hist->module->instance && module->multi_priority == hist->module->multi_priority)
{
free(hist->params);
free(hist->blend_params);
free(hist);
dev->history = g_list_delete_link(dev->history, elem);
dev->history_end--;
del = 1;
}
else
{
pos++;
}
}
}
dt_pthread_mutex_unlock(&dev->history_mutex);
//and we remove it from the list
GList *modules = g_list_first(dev->iop);
while(modules)
{
dt_iop_module_t *mod = (dt_iop_module_t *)modules->data;
if(mod == module)
{
dev->iop = g_list_remove_link(dev->iop,modules);
break;
}
modules = g_list_next(modules);
}
if(dev->gui_attached && del)
{
/* signal that history has changed */
dt_control_signal_raise(darktable.signals, DT_SIGNAL_DEVELOP_HISTORY_CHANGE);
/* redraw */
dt_control_queue_redraw_center();
}
}
开发者ID:ealasu,项目名称:darktable,代码行数:55,代码来源:develop.c
示例6: gui_update
void gui_update(struct dt_iop_module_t *self)
{
dt_iop_exposure_gui_data_t *g = (dt_iop_exposure_gui_data_t *)self->gui_data;
dt_iop_exposure_params_t *p = (dt_iop_exposure_params_t *)self->params;
if(!dt_image_is_raw(&self->dev->image_storage))
{
gtk_widget_hide(GTK_WIDGET(g->mode));
p->mode = EXPOSURE_MODE_MANUAL;
dt_dev_add_history_item(darktable.develop, self, TRUE);
}
else
{
gtk_widget_show(GTK_WIDGET(g->mode));
}
dt_bauhaus_combobox_set(g->mode, g_list_index(g->modes, GUINT_TO_POINTER(p->mode)));
dt_bauhaus_slider_set_soft(g->black, p->black);
dt_bauhaus_slider_set_soft(g->exposure, p->exposure);
gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(g->autoexp), FALSE);
dt_bauhaus_slider_set(g->autoexpp, 0.01);
gtk_widget_set_sensitive(GTK_WIDGET(g->autoexpp), FALSE);
dt_bauhaus_slider_set(g->deflicker_percentile, p->deflicker_percentile);
dt_bauhaus_slider_set(g->deflicker_target_level, p->deflicker_target_level);
dt_bauhaus_combobox_set(
g->deflicker_histogram_source,
g_list_index(g->deflicker_histogram_sources, GUINT_TO_POINTER(p->deflicker_histogram_source)));
self->request_color_pick = DT_REQUEST_COLORPICK_OFF;
free(g->deflicker_histogram);
g->deflicker_histogram = NULL;
gtk_label_set_text(g->deflicker_used_EC, "");
dt_pthread_mutex_lock(&g->lock);
g->deflicker_computed_exposure = NAN;
dt_pthread_mutex_unlock(&g->lock);
switch(p->mode)
{
case EXPOSURE_MODE_DEFLICKER:
autoexp_disable(self);
gtk_stack_set_visible_child_name(GTK_STACK(g->mode_stack), "deflicker");
if(p->deflicker_histogram_source == DEFLICKER_HISTOGRAM_SOURCE_SOURCEFILE)
deflicker_prepare_histogram(self, &g->deflicker_histogram, &g->deflicker_histogram_stats);
break;
case EXPOSURE_MODE_MANUAL:
default:
gtk_stack_set_visible_child_name(GTK_STACK(g->mode_stack), "manual");
break;
}
}
开发者ID:Acidburn0zzz,项目名称:darktable,代码行数:55,代码来源:exposure.c
示例7: _camera_configuration_update
void _camera_configuration_update(const dt_camctl_t *c,const dt_camera_t *camera)
{
// dt_camctl_t *camctl=(dt_camctl_t *)c;
dt_camera_t *cam=(dt_camera_t *)camera;
dt_pthread_mutex_lock(&cam->config_lock);
CameraWidget *remote; // Copy of remote configuration
gp_camera_get_config( camera->gpcam, &remote, c->gpcontext );
// merge remote copy with cache and notify on changed properties to host application
_camera_configuration_merge(c, camera, remote, camera->configuration, FALSE );
dt_pthread_mutex_unlock(&cam->config_lock);
}
开发者ID:ammonriley,项目名称:darktable,代码行数:11,代码来源:camera_control.c
示例8: dt_control_run_job
static int32_t dt_control_run_job(dt_control_t *control)
{
_dt_job_t *job = dt_control_schedule_job(control);
if(!job) return -1;
/* change state to running */
dt_pthread_mutex_lock(&job->wait_mutex);
if(dt_control_job_get_state(job) == DT_JOB_STATE_QUEUED)
{
dt_print(DT_DEBUG_CONTROL, "[run_job+] %02d %f ", DT_CTL_WORKER_RESERVED + dt_control_get_threadid(),
dt_get_wtime());
dt_control_job_print(job);
dt_print(DT_DEBUG_CONTROL, "\n");
dt_control_job_set_state(job, DT_JOB_STATE_RUNNING);
/* execute job */
job->result = job->execute(job);
dt_control_job_set_state(job, DT_JOB_STATE_FINISHED);
dt_print(DT_DEBUG_CONTROL, "[run_job-] %02d %f ", DT_CTL_WORKER_RESERVED + dt_control_get_threadid(),
dt_get_wtime());
dt_control_job_print(job);
dt_print(DT_DEBUG_CONTROL, "\n");
}
dt_pthread_mutex_unlock(&job->wait_mutex);
// remove the job from scheduled job array (for job deduping)
dt_pthread_mutex_lock(&control->queue_mutex);
control->job[dt_control_get_threadid()] = NULL;
if(job->queue == DT_JOB_QUEUE_USER_EXPORT) control->export_scheduled = FALSE;
dt_pthread_mutex_unlock(&control->queue_mutex);
// and free it
dt_control_job_dispose(job);
return 0;
}
开发者ID:kaindl,项目名称:darktable,代码行数:41,代码来源:jobs.c
示例9: dt_control_job_wait
void dt_control_job_wait(dt_job_t *j)
{
int state = dt_control_job_get_state (j);
/* if job execution not is finished let's wait for signal */
if (state==DT_JOB_STATE_RUNNING || state==DT_JOB_STATE_CANCELLED)
{
dt_pthread_mutex_lock (&j->wait_mutex);
dt_pthread_mutex_unlock (&j->wait_mutex);
}
}
开发者ID:kriomant,项目名称:darktable,代码行数:12,代码来源:control.c
示例10: dt_control_job_wait
void dt_control_job_wait(_dt_job_t *job)
{
if(!job) return;
dt_job_state_t state = dt_control_job_get_state(job);
/* if job execution is not finished let's wait for signal */
if(state == DT_JOB_STATE_RUNNING || state == DT_JOB_STATE_CANCELLED)
{
dt_pthread_mutex_lock(&job->wait_mutex);
dt_pthread_mutex_unlock(&job->wait_mutex);
}
}
开发者ID:andyTsing,项目名称:darktable,代码行数:12,代码来源:jobs.c
示例11: while
static void *dt_control_worker_kicker(void *ptr)
{
dt_control_t *control = (dt_control_t *)ptr;
while(dt_control_running())
{
sleep(2);
dt_pthread_mutex_lock(&control->cond_mutex);
pthread_cond_broadcast(&control->cond);
dt_pthread_mutex_unlock(&control->cond_mutex);
}
return NULL;
}
开发者ID:andyTsing,项目名称:darktable,代码行数:12,代码来源:jobs.c
示例12: dt_control_shutdown
void dt_control_shutdown(dt_control_t *s)
{
dt_pthread_mutex_lock(&s->cond_mutex);
dt_pthread_mutex_lock(&s->run_mutex);
s->running = 0;
dt_pthread_mutex_unlock(&s->run_mutex);
dt_pthread_mutex_unlock(&s->cond_mutex);
pthread_cond_broadcast(&s->cond);
/* first wait for kick_on_workers_thread */
pthread_join(s->kick_on_workers_thread, NULL);
int k;
for(k = 0; k < s->num_threads; k++)
// pthread_kill(s->thread[k], 9);
pthread_join(s->thread[k], NULL);
for(k = 0; k < DT_CTL_WORKER_RESERVED; k++)
// pthread_kill(s->thread_res[k], 9);
pthread_join(s->thread_res[k], NULL);
}
开发者ID:AdamMajer,项目名称:darktable,代码行数:21,代码来源:control.c
示例13: dt_control_set_mouse_over_id
void dt_control_set_mouse_over_id(int32_t value)
{
dt_pthread_mutex_lock(&(darktable.control->global_mutex));
if(darktable.control->mouse_over_id != value)
{
darktable.control->mouse_over_id = value;
dt_pthread_mutex_unlock(&(darktable.control->global_mutex));
dt_control_signal_raise(darktable.signals, DT_SIGNAL_MOUSE_OVER_IMAGE_CHANGE);
}
else
dt_pthread_mutex_unlock(&(darktable.control->global_mutex));
}
开发者ID:AdamMajer,项目名称:darktable,代码行数:12,代码来源:control.c
示例14: dt_cache_remove
int dt_cache_remove(dt_cache_t *cache, const uint32_t key)
{
gpointer orig_key, value;
gboolean res;
int result;
dt_cache_entry_t *entry;
restart:
dt_pthread_mutex_lock(&cache->lock);
res = g_hash_table_lookup_extended(
cache->hashtable, GINT_TO_POINTER(key), &orig_key, &value);
entry = (dt_cache_entry_t *)value;
if(!res)
{ // not found in cache, not deleting.
dt_pthread_mutex_unlock(&cache->lock);
return 1;
}
// need write lock to be able to delete:
result = dt_pthread_rwlock_trywrlock(&entry->lock);
if(result)
{
dt_pthread_mutex_unlock(&cache->lock);
g_usleep(5);
goto restart;
}
if(entry->_lock_demoting)
{
// oops, we are currently demoting (rw -> r) lock to this entry in some thread. do not touch!
dt_pthread_rwlock_unlock(&entry->lock);
dt_pthread_mutex_unlock(&cache->lock);
g_usleep(5);
goto restart;
}
gboolean removed = g_hash_table_remove(cache->hashtable, GINT_TO_POINTER(key));
(void)removed; // make non-assert compile happy
assert(removed);
cache->lru = g_list_delete_link(cache->lru, entry->link);
if(cache->cleanup)
cache->cleanup(cache->cleanup_data, entry);
else
dt_free_align(entry->data);
dt_pthread_rwlock_unlock(&entry->lock);
dt_pthread_rwlock_destroy(&entry->lock);
cache->cost -= entry->cost;
g_slice_free1(sizeof(*entry), entry);
dt_pthread_mutex_unlock(&cache->lock);
return 0;
}
开发者ID:kael-shipman,项目名称:darktable,代码行数:52,代码来源:cache.c
示例15: dt_lua_lock
gboolean dt_lua_lock()
{
gboolean had_lock = dt_control_gdk_haslock();
if(had_lock){
dt_control_gdk_unlock();
}
if(!darktable.lua_state.ending && pthread_equal(darktable.control->gui_thread,pthread_self()) != 0) {
dt_print(DT_DEBUG_LUA,"LUA WARNING locking from the gui thread should be avoided\n");
}
dt_pthread_mutex_lock(&darktable.lua_state.mutex);
return had_lock;
}
开发者ID:bartokk,项目名称:darktable,代码行数:13,代码来源:lua.c
示例16: _camera_get_job
gpointer _camera_get_job( const dt_camctl_t *c,const dt_camera_t *camera )
{
dt_camera_t *cam=(dt_camera_t *)camera;
dt_pthread_mutex_lock(&cam->jobqueue_lock);
gpointer job=NULL;
if( g_list_length(cam->jobqueue) > 0 )
{
job = g_list_nth_data(cam->jobqueue,0);
cam->jobqueue = g_list_remove(cam->jobqueue,job);
}
dt_pthread_mutex_unlock(&cam->jobqueue_lock);
return job;
}
开发者ID:ammonriley,项目名称:darktable,代码行数:13,代码来源:camera_control.c
示例17: dt_lua_lock_internal
void dt_lua_lock_internal(const char *function, const char *file, int line, gboolean silent)
{
if(!silent && !darktable.lua_state.ending && pthread_equal(darktable.control->gui_thread, pthread_self()) != 0)
{
dt_print(DT_DEBUG_LUA, "LUA WARNING locking from the gui thread should be avoided\n");
//g_assert(false);
}
dt_pthread_mutex_lock(&darktable.lua_state.mutex);
#ifdef _DEBUG
dt_print(DT_DEBUG_LUA,"LUA DEBUG : %s called from %s:%d (%s)\n", __FUNCTION__, file, line, function);
#endif
}
开发者ID:WhiteSymmetry,项目名称:darktable,代码行数:13,代码来源:lua.c
示例18: _camera_configuration_commit
void _camera_configuration_commit(const dt_camctl_t *c,const dt_camera_t *camera)
{
g_assert( camera != NULL );
dt_camera_t *cam=(dt_camera_t *)camera;
dt_pthread_mutex_lock(&cam->config_lock);
if( gp_camera_set_config( camera->gpcam, camera->configuration, c->gpcontext) != GP_OK )
dt_print(DT_DEBUG_CAMCTL,"[camera_control] Failed to commit configuration changes to camera\n");
cam->config_changed=FALSE;
dt_pthread_mutex_unlock(&cam->config_lock);
}
开发者ID:ammonriley,项目名称:darktable,代码行数:13,代码来源:camera_control.c
示例19: dt_opencl_free_kernel
void dt_opencl_free_kernel(const int kernel)
{
dt_opencl_t *cl = darktable.opencl;
if(!cl->inited) return;
if(kernel < 0 || kernel >= DT_OPENCL_MAX_KERNELS) return;
dt_pthread_mutex_lock(&cl->lock);
for(int dev=0; dev<cl->num_devs; dev++)
{
cl->dev[dev].kernel_used [kernel] = 0;
(cl->dlocl->symbols->dt_clReleaseKernel) (cl->dev[dev].kernel [kernel]);
}
dt_pthread_mutex_unlock(&cl->lock);
}
开发者ID:sk1p,项目名称:darktable,代码行数:13,代码来源:opencl.c
示例20: dt_camctl_register_listener
void dt_camctl_register_listener( const dt_camctl_t *c, dt_camctl_listener_t *listener)
{
dt_camctl_t *camctl=(dt_camctl_t *)c;
// Just locking mutex and prevent signalling CAMERA_CONTROL_BUSY
dt_pthread_mutex_lock(&camctl->lock);
if( g_list_find(camctl->listeners,listener) == NULL )
{
camctl->listeners=g_list_append(camctl->listeners,listener);
dt_print(DT_DEBUG_CAMCTL,"[camera_control] registering listener %lx\n",(unsigned long int)listener);
}
else
dt_print(DT_DEBUG_CAMCTL,"[camera_control] registering already registered listener %lx\n",(unsigned long int)listener);
dt_pthread_mutex_unlock(&camctl->lock);
}
开发者ID:ammonriley,项目名称:darktable,代码行数:14,代码来源:camera_control.c
注:本文中的dt_pthread_mutex_lock函数示例由纯净天空整理自Github/MSDocs等源码及文档管理平台,相关代码片段筛选自各路编程大神贡献的开源项目,源码版权归原作者所有,传播和使用请参考对应项目的License;未经允许,请勿转载。 |
请发表评论