Мой g_thread_push не работает - PullRequest
       3

Мой g_thread_push не работает

0 голосов
/ 15 февраля 2011

Я пытаюсь создать многопоточную программу вращения jpg, но у меня возникают проблемы при работе g_thread.

<code>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);<br>
  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 Ответ

1 голос
/ 15 февраля 2011

Прежде всего, в коде, который вы вставили, есть ошибка в операторе for.

Предполагая, что это исправлено, вот несколько замечаний.

  1. Я не уверенпочему это не удается, но вы можете получить некоторую информацию от члена «сообщения» GError, который представляет собой читаемую человеком строку C, которую вы можете использовать с printf () или чем угодно.К сожалению, вы установили для аргументов GError значение NULL в вызовах g_thread _ * ().
  2. Эта подпрограмма пропускает пул потоков;Вы должны вызвать g_thread_pool_free () перед выходом из него.
  3. Если вы выполняете другие потоки в своей программе и заботитесь о производительности, вы должны тщательно подумать, хотите ли вы, чтобы эти потоки были эксклюзивными или общими.Это устанавливается с аргументом g_thread_pool_new (), который вы установили в TRUE (эксклюзив).
...