我的g_thread_push无效

时间:2011-02-15 00:32:51

标签: c threadpool

我正在尝试创建一个多线程jpg循环程序,但是我在使g_thread工作时遇到了问题。

int processUserRequest (UserRequest *uRequest,
            char * const* argv, int argc, int optind){
  struct RotationData CurData;
  CurData.argv=argv;
  CurData.argc=argc;
  CurData.optind=optind;
  CurData.uRequest=uRequest;
  gpointer user_data = &CurData;
  int transform = FALSE;
  int max_files = argc - optind;
  int i;
  gpointer data=&i;
  GThreadPool *pool;
  if(!g_thread_supported())
       g_thread_init(NULL);
pool = g_thread_pool_new(MultiThreadRotation,user_data, 5, TRUE, NULL); for(i=0;i { g_thread_pool_push(pool, &data,NULL); } //g_thread_pool_free (pool, TRUE,TRUE); //Create a montage file transform = createMontageFile (uRequest); return transform; }

函数MultiThreadRotation假设由g_thread_pool_push调用,但它一次不好。任何人都可以帮忙,我是新手。

另外,我考虑过从g_thread_pool_push输出错误,你会如何输出GError *错误信息?

1 个答案:

答案 0 :(得分:1)

首先,在您粘贴的代码中,for语句中存在一个错误。

假设已经修复,这里有一些评论。

  1. 我不确定为什么会失败,但你可以从GError的消息中得到一些指示" member,这是一个人类可读的C字符串,可以与printf()或任何你喜欢的一起使用。不幸的是,您已经在g_thread _ *()调用中将GError参数设置为NULL。
  2. 此例程泄漏线程池;你应该在退出之前调用g_thread_pool_free()。​​
  3. 如果您在程序中执行其他线程,并且您关心性能,则应仔细考虑是否希望这些线程是独占的或共享的。用g_thread_pool_new()设置的参数设置为TRUE(不包括)。