我想创建线程来从外部执行任务, 然而,
pthread_create
会导致分割错误,但结果值为0
。
如果我仅使用
thread_function
设置 ;
而没有任何其他代码,它也会失败。
typedef struct {
int socket;
int login_state;
int connect_state;
int send_length;
ATW_TReqParams* thread_aparams;
void (*ATWFtpNotify)(ATW_TReqParams* AParams);
}ThreadData;
pthread_t worker_thread;
ThreadData* thread_data = NULL;
void* thread_function(void* arg) {
if (arg == NULL) {
return NULL;
}
ThreadData* data = (ThreadData*)arg;
while (data != NULL) {
pthread_mutex_lock(&task_mutex);
while (data->ATWFtpNotify == NULL) {
pthread_cond_wait(&task_condition, &task_mutex);
}
if (data->ATWFtpNotify != NULL) {
data->ATWFtpNotify(data);
data->ATWFtpNotify = NULL;
}
pthread_mutex_unlock(&task_mutex);
}
}
int ATWPlusOpen(int AChipNo)
{
int result = 1;
if (thread_data == NULL)
thread_data = (ThreadData*)malloc(sizeof(ThreadData));
if (thread_data != NULL) {
thread_data->socket = -1;
thread_data->login_state = 0;
thread_data->connect_state = 0;
thread_data->thread_aparams = NULL;
thread_data->ATWFtpNotify = NULL;
result = pthread_create(&worker_thread, NULL, thread_function, thread_data);
}
return result;
}
一个错误是您的线程回调在某些执行路径中缺少
return
。这意味着每次线程完成时它可能会崩溃。如果您启用编译器警告并注意它们,那么这个错误就会被发现。也可能存在其他错误。