gpt4 book ai didi

c - 保持线程存活 (pthread, c)

转载 作者:太空宇宙 更新时间:2023-11-04 04:49:30 25 4
gpt4 key购买 nike

我有以下情况:

Fortran 程序调用 (iso_c_binding) 函数(用 C 语言编写)通过 pthread_create 函数启动服务器(套接字函数)。该服务器应该一直运行(等待连接),直到将某个变量设置为 1。我遇到的问题是,一旦启动服务器的函数返回(到 Fortran 程序),服务器线程就会退出。我不确定如何处理这种情况(让服务器套接字运行直到它收到停止信号)。

亲切的问候

(添加代码)

fortran程序

...
FUNCTION run_server(ServerRuns) bind(c,name='run_server')
use iso_c_binding
import :: c_int
integer(kind=c_int) :: run_server
integer(kind=c_int), value :: ServerRuns
END FUNCTION run_server
...
fserver = run_server(ServerRuns)
...

c 运行服务器代码

int run_server(int cservrun){

int err;
pthread_t tid[1];
int i = 0;

if (cservrun != 0){
printf("[error] Process already running.\n");
return -1;
}else{

err = pthread_create(&(tid[0]), NULL, (void *)&server, NULL);

if (err != 0){
printf("[error] Can't create \"server\" thread");
return -1;
}else{
printf("Server running\n");
return 0;
}
}
}

c 服务器代码

int server(void){

...
stop_serv = 0;

while(stop_serv == 0){
printf("Server loop\n");
newsockfd = accept(sockfd, (struct sockaddr *) &cli_addr, &clilen);

if (newsockfd < 0){
printf("[error] on accept");
return -1;
}

bzero(buffer,SOB);
n = read(newsockfd,buffer,SOB-1);
if (n < 0){
printf("[error] reading from socket");
return -1;
}

printf("Message: _%s_\n",buffer);

close(newsockfd);

}

close(sockfd);
cservrun = 0;

return 0;
}

如果我在“c run server code”中的“Server running”语句之后(返回 0 之前)添加 while(1) 循环,服务器将保持事件状态并继续读取消息。我不得不说,我既不是 Fortran 编程专家,也不是 C 编程专家。

最佳答案

我刚刚找到了解决方案。我在 Makefile 中做了一些更改,我发现我真的错过了 -pthread 选项。真的很奇怪,没有错误消息,而且线程根本就没有创建。非常感谢您的帮助!我真的很感激。

关于c - 保持线程存活 (pthread, c),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17230279/

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