我知道这种错误的原因。 “int”不足以容纳“void *”的字节。但我的问题是,当我想传递一个函数的参数来执行它时,我应该如何处理Linux的pthread_create
。在许多例子中,我看到了这样的函数forward-declaration:
void* thread_proc(void* arg);
然后在函数中,文件指针作为arg
(类型为int)传递。但是编译器(逻辑上)会抛出一个错误,警告不要将int转换为void。我甚至使用了intptr_t(又名长指针),但无济于事。
result = pthread_create(&thread_id, NULL, thread_proc, (void *)new_request_socket);
new_request_socket
是一个表示套接字fd的int。
我如何传递整数作为函数的参数本身作为函数传递,由pthread_create()
执行。
答案 0 :(得分:1)
你可能传递int本身而不是指向int的颜色。
你应该实际传递指针
$(function() {
// Handler for .ready() called.
});
并在result = pthread_create(&thread_id, NULL, thread_proc, (void *)&new_request_socket);
中使用它:
thread_proc(void *arg)
编辑:澄清Sam和Lightness关于传递指针void thread_proc(void *arg)
{
int new_request_socket = *arg; //please put appropriate cast
}
:
thread_proc
的同时访问
new_request_socket
读取之前不要免费new_request_socket
。基本上使thread_proc
成为指针,你必须编写更多代码。所以不要编写更多代码并使用new_request_socket
:)