rsc*_*rin 2 c parameters multithreading pthreads
我有这些结构:
struct Request {
char buf[MAXLENREQ];
char inf[MAXLENREQ]; /* buffer per richiesta INF */
int lenreq;
uint16_t port; /* porta server */
struct in_addr serveraddr; /* ip server sockaddr_in */
char path[MAXLENPATH];
/*struct Range range;*/
};
struct RequestGet {
char buf[MAXLENREQ];
int maxconnect;
struct Range range;
};
struct ResponseGet{
char buf[MAXLENDATA];
//int LenRange;
int expire;
char dati[MAXLENDATA];
struct Range range;
};
Run Code Online (Sandbox Code Playgroud)
我怎么能把它们传递给pthread_create?无论每个结构领域的含义如何.
pthread_create(&id,NULL,thread_func,????HERE????);
Run Code Online (Sandbox Code Playgroud)
您只能传递一个参数,因此您通常需要创建一个带有一个参数的函数,即使它只包含其他一些调用.你可以通过创建一个struct并让函数获取指向这样的指针来实现struct.
下面说明这一点的基本示例如下.请注意,它不是一个完整的例子,不应该按原样使用!请注意,例如,没有malloc()释放分配的内存.
struct RequestWrapper {
struct Request *request;
struct RequestGet *request_get;
struct ResponseGet *response_get;
};
void thread_func(struct RequestWrapper *rw) {
// function body here
}
int main(int argc, char *argv[]) {
struct Request *request = malloc(sizeof(*request));
struct RequestGet *request_get = malloc(sizeof(*request_get));
struct ResponseGet *response_get = malloc(sizeof(*response_get));
...
struct RequestWrapper *wrapper = malloc(sizeof(*wrapper));
wrapper->request = request;
wrapper->request_get = request_get;
wrapper->response_get = response_get;
...
pthread_create(&id, NULL, thread_func, &wrapper);
...
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
9113 次 |
| 最近记录: |