Понимание поведения программы - PullRequest
0 голосов
/ 02 марта 2019

Я запускаю следующую программу:

#include <unistd.h>
#include<time.h>
static void threadStart(void (*function)(void), void* arg) {
    // schedules thread in Queue
    function(void* arg);
}

Компилятор выдаёт мне две ошибки:

In function ‘threadStart’:
sample.c:5:11: error: expected expression before ‘void’
 function(void* arg);
       ^
 sample.c:5:11: error: too many arguments to function ‘function’

Как передать функцию для запуска с заданным аргументом без возникновения ошибок?

1 Ответ

0 голосов
/ 02 марта 2019

Я начал записывать ответ, который я только что удалил и который предположил, что это то, что вы хотели:

static void threadStart(void (*function)(void*), void* arg) {
    // schedules thread in Queue
    function(arg);
}

Но затем я посмотрел на то, что вы пытаетесь сделать с помощью указателя на функцию,это почти похоже на pthread_create подпрограмму запуска.

Так что не имело смысла, что у вас есть функция с именем threadStart, которая не запускает поток и не является подпрограммой запуска для потока.Я могу ошибаться, потому что мы не видим в вашем коде ничего, что подсказывало бы, как вызывается threadStart.

Так что мне было интересно, действительно ли это то, что вы на самом деле имели в виду, функция, которая должна выполняться внутриthread:

void* threadStart(void* arg)
{
    someOtherCodeOrFunction(arg); // your code goes here
}

И вы намеревались создать экземпляр этого потока для запуска вышеуказанной функции с arg в качестве значения параметра:

pthread_create(&thread, NULL, threadStart, arg);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...