Выполнить поток после завершения метода? - PullRequest
0 голосов
/ 05 декабря 2011

У меня есть следующий сценарий:

void* Refresh(void *)
{
 usleep(10);
 ..
}

static void RefreshViews()
{    ...
     pthread_t t;
     pthread_create( &t, NULL, &Refresh, NULL);
     ...
}

Я хочу запустить поток в конце функции RefreshViews ().Чтобы он работал (временное решение) правильно, я добавил сон в другой поток в начале его выполнения в функции Refresh ().

Как мне лучше справиться с этой ситуацией?

Ответы [ 2 ]

1 голос
/ 05 декабря 2011

Вы можете использовать три метода:

  1. Как я уже сказал в своем комментарии, начните тему непосредственно перед тем, как выйти из функции.

    static void RefreshViews()
    {
        /* The code... */
    
        pthread_t t;
        pthread_create( &t, NULL, &Refresh, NULL);
    }
    
  2. Создать поток в функции, вызывающей RefreshViews.

  3. Есть дополнительная функция, которая действует как прокси для реальной функции и которая создает поток:

    static void RefreshViews()
    {
        RealRefreshViews();
        pthread_t t;
        pthread_create( &t, NULL, &Refresh, NULL);
    }
    

Одна вещь, связанная с первым методом, заключается в том, что вы должны помнить о создании потока, если у вас есть явный return до конца функции. Или используйте goto для перехода к созданию потока вместо return.

0 голосов
/ 05 декабря 2011

Определите ручку среза вне статической функции или сделайте ее статической.Дескриптор потока в вашей функции будет уничтожен, как только вы выйдете из функции и t извлечется из стека.Если вам не нужен контроль над потоком (или его удаление чистым способом), оставьте его как есть.

...