我想用pthreads在C中模擬回調機制。我的代碼如下:用pthreads在結構中傳遞函數指針
#include <stdio.h>
#include <pthread.h>
struct fopen_struct {
char *filename;
char *mode;
void *(*callback) (FILE *);
};
void *fopen_callback(FILE *);
void fopen_t(void *(*callback)(FILE *), const char *, const char *);
void *__fopen_t__(void *);
void fopen_t(void *(*callback)(FILE *), const char *filename, const char *mode) {
struct fopen_struct args;
args.filename = filename;
args.mode = mode;
args.callback = callback;
pthread_t thread;
pthread_create(&thread, NULL, &__fopen_t__, &args);
}
void *__fopen_t__(void *ptr) {
struct fopen_struct *args = (struct fopen_struct *)ptr;
FILE *result = fopen(args -> filename, args -> mode);
args -> callback(result);
}
int main() {
fopen_t(&fopen_callback, "test.txt", "r");
}
void *fopen_callback(FILE *stream) {
if (stream != NULL)
printf("Opened file successfully\n");
else
printf("Error\n");
}
這個編譯,但是執行時,它會在屏幕上完成而沒有錯誤或消息。我錯過了什麼?
您的主線程在末端完成。 – hetepeperfan
爲了運行一次回調,產生一個線程聽起來有點沉重。如果我是你,我會創建一個專用於回調執行的線程。當需要回調時,您可以將其推送到將由回調線程處理的隊列中。當然,如果回調所做的工作量太大(但不應該),產生一個線程是OK :) – Rerito