возвращение рутины - PullRequest
       3

возвращение рутины

0 голосов
/ 12 ноября 2010

Это было продиктовано мне, что моя рутина должна иметь возвращаемое значение, и она должна быть возвращена.

т.е.:

int mySuperThread(void)

Я запускаю тему, и она делает то, что должна. Вопрос, который задают, состоит в том, как непрерывно перезапускать поток снова и снова и снова, чтобы выполнять свою работу, при этом все еще имея возможность возвращать целое число (которое генерируется во время выполнения потока ...). Напомню, насколько я понимаю, это требование, чтобы я использовал вызов return через возвращаемое значение потока.

Предложения? Я пытаюсь выяснить, есть ли какой-то флаг или функция, которую я пропускаю и которая связана с pthreads, которая позволяет перезапускать поток, когда он заканчивается.

1 Ответ

2 голосов
/ 12 ноября 2010

Для начала, если вы вызываете вышеуказанную функцию с помощью pthreads, у вас, вероятно, возникнут некоторые проблемы.Сигнатура указателя функции, переданного в pthread_create, должна быть void * functionname(void*), то есть это должна быть функция, которая принимает один указатель на аргумент void и возвращает указатель на void.

К счастью, void* можно привести к и от int с относительно небольшой болью, поэтому возврат вашей функции может выглядеть следующим образом:

return (void*) 5;

Получение этого возвращаемого значения немного большеучаствует.Вы правы в том, что запутались в продолжении темы после возврата;ты не можешьТо, что вы хотите сделать, это соединить с потоком, который просто ждет, пока поток не вернется.Как только это будет сделано, вы можете перезапустить поток, как вы делали раньше.

pthread_t mythread;
int result;
while(1){
    pthread_create(&mythread, NULL, mySuperThread, NULL);
    pthread_join(mythread, &result);
    /* do something with result */
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...