[英]Keep Thread alive (pthread, c)
我有以下情况:
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运行服务器代码”中的“服务器运行”语句之后(在返回0之前)添加while(1)循环,则服务器将保持活动状态并继续读取消息。 我必须说,我既不是Fortran编程也不是C编程专家。
我刚刚找到了解决方案。 我在Makefile中做了一些更改,发现我真的错过了-pthread选项。 确实很奇怪,没有错误消息,而且根本就创建了线程。 非常感谢您的所有帮助! 我真的很感激。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.