gpt4 book ai didi

c - 在 C 中使用 pthread lib 和 Cmake

转载 作者:太空宇宙 更新时间:2023-11-04 00:02:02 24 4
gpt4 key购买 nike

/* 已编辑 */

我的 Cmakefile.txt 文件是:

cmake_minimum_required(VERSION 3.3)
project(WebServer)

set(CMAKE_C_COMPILER "/usr/bin/gcc")

set(SOURCE_FILES io.c server.c lock_fcntl.c sig_handler.c thread_job.c msg_parser.c)
set(LIB http-parser-master/http_parser.c)

set(CMAKE_USE_PTHREADS_INIT true)
set(CMAKE_USE_PTHREADS_INIT ON)

find_package(Threads REQUIRED)

add_executable(server ${SOURCE_FILES} ${LIB})

target_link_libraries(server Threads::Threads)

add_executable(client client.c io.c)
include_directories(header)
include_directories(http-parser-master)

这样,我就可以编译和链接我的代码了。但是 pthread_create 似乎不起作用。

服务器.c:

void create_thread(int socket) {

data_t *data;
data = malloc(sizeof(data_t));
if (data == NULL) {
fprintf(stderr, "error in memory allocation");
exit(EXIT_FAILURE);
}

data->sock = socket;

/* debug */
fprintf(stdout, "[*] Creating thread\n");
fflush(stdout);

if (pthread_create(data->tid, NULL, job_t, data) != 0) {
fprintf(stderr, "Error returned by pthread_create()\n");
exit(EXIT_FAILURE);
}

/* debug */
fprintf(stdout, "[*] Thread created\n");
fflush(stdout);

}

thread_job.c:

void *job_t(void *arg) {

data_t *data = arg;

char *http_msg_h;
int nread;

/* debug */
fprintf(stdout, "start listening\n");
fflush(stdout);

/* read http header from connsd socket and store it in msg buffer */
nread = receive_msg_h(data->sock, (void **) &http_msg_h);

/* debug */
fprintf(stdout, "[+] parsing completed");
fflush(stdout);

}

输出中既没有打印“开始监听”也没有打印“线程创建”。就好像函数没有返回但它不起作用。

最佳答案

CMakeLists.txt 是正确的。我的错误在代码中。我改变pthread_create(data->tid, NULL, job_t, data) != 0pthread_create(&data->tid, NULL, job_t, data) != 0 中。

关于c - 在 C 中使用 pthread lib 和 Cmake,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39309277/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com