4

是的,我知道如何创建 SDL 线程。

int myfunc(void* data)
{
    //my code...
}
SDL_CreateThread* mythread=SDL_CreateThread(myfunc,NULL);

但是,如果我想做类似的事情怎么办:

int myfunc(void* data,int myparameter1,char myparameter2)
{
    //my code...
}
SDL_CreateThread* mythread=SDL_CreateThread(myfunc,NULL,42,'c');

即如何为具有多个参数的函数创建一个线程(参数不包括通常的'void * data')如果这是不可能的,你能建议我可以将参数传递给线程的任何方法吗?

4

1 回答 1

8

您可以在堆上创建一个struct,用您的数据设置其字段,然后将其地址传递给SDL_CreateThread

typedef struct {
    int param1;
    char param2;
} ThreadData;

int myfunc(void* data)
{
    ThreadData *tdata = data;
    int param1 = tdata->param1;
    char param2 = tdata->param2;
    free(data); // depending on the content of `data`, this may have
                // to be something more than a single `free`
    //my code...
}
ThreadData *data = malloc(sizeof(ThreadData));
data->param1 = ...;
data->param2 = ...;
SDL_CreateThread* mythread=SDL_CreateThread(myfunc,data);
于 2013-07-22T16:21:28.100 回答