免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 1338 | 回复: 6
打印 上一主题 下一主题

[Linux] linux下编辑的服务器不支持线程问题请教 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2014-04-13 20:54 |只看该作者 |倒序浏览
本帖最后由 风花雪月13 于 2014-04-13 21:03 编辑

#include <glib.h>
#include <stdio.h>
#include <fcntl.h>
#include <signal.h>
#include <sys/socket.h>
#include <sys/types.h>
#include <sys/time.h>
#include <unistd.h>
#include <netdb.h>
#include <netinet/in.h>
#define OURPORT 8088
#define MAX_USERS 8 //定义用户数据结构
struct _client
{
   gint sd;
   gboolean in_use;
   gchar name[64];
   gchar buf[1024];
};
typedef struct _client client;//定义用户数据区
client user[MAX_USERS];//定义服务线程
void do_service (gpointer id)
{
   gint j;
   char tobuf[1024];
   while(read(user[GPOINTER_TO_INT(id)].sd,user[GPOINTER_TO_INT(id)].buf,1024)!=-1)
     {
       sprintf(tobuf,"%s:%s\n",user[GPOINTER_TO_INT(id)].name,user[GPOINTER_TO_INT(id)].buf);
       for(j=0; j<MAX_USERS; j++)
          {
            if(user[j].in_use)
              {
                 write(user[j].sd,tobuf,1024);
                 g_print("%s",tobuf);
              }
          }
     }
user[GPOINTER_TO_INT(id)].in_use = FALSE;
close(user[GPOINTER_TO_INT(id)].sd);

   exit(0);
}
int main(int argc, char* argv[])
{
   gint sd, newsd;
   struct sockaddr_in *sin;  
   gint slen;
   gint count = 0;
   gint flags;
   gchar buf[1024];
   gchar tobuf[1024];
   gint length,i,j;
   if(!g_thread_supported())
     g_thread_init(NULL);
   else
     g_print("thread not supported\n");
    sd = socket(AF_INET,SOCK_STREAM,0);
   if(sd == -1)
     {
       g_print("create socket error!\n");
       return -1;
     }
   sin = g_new(struct sockaddr_in,1);
   sin->sin_family = AF_INET;
   sin->sin_port = OURPORT;
   slen = sizeof(struct sockaddr_in);
   if(bind(sd,sin,slen)<0)
     {
        g_print("bind error!\n");
        return -1;
     }
   if(listen(sd,8)<0)
     {
        g_print("listen error!\n");
        return -1;
     }
   for(i=0; i<MAX_USERS; i++)
     user.in_use = FALSE;
   flags = fcntl(sd,F_GETFL);
   fcntl(sd,F_SETFL,flags&~O_NDELAY);
   for(;;)
      {
         newsd = accept(sd,sin,&slen);
         if(newsd == -1)
            {
              g_print("accept error!\n");
              break;
            }
         else
            {
               if(count >= MAX_USERS)
                  {
                     sprintf(buf,"用户数量过多服务器不能连接。\n");
                     write(newsd,buf,1024);
                     close(newsd);
                  }
               else
                  {
                     flags = fcntl(user.sd,F_GETFL);
                     fcntl(user.sd,F_SETFL,O_NONBLOCK);
                     user[count].sd = newsd;   
                     user[count].in_use = TRUE;
                     read(newsd,user[count].name,64);   // 创建为用户服务的线程
                     g_thread_create((GThreadFunc)do_service, (gpointer)count,TRUE,NULL);
                     count++;
                  }
            }
      }
close(sd);
g_free(sin);
}


编译通过了,可是运行服务器的时候提示
“thread not supported”线程不支持,这是怎么回事,高手帮忙看下

论坛徽章:
0
2 [报告]
发表于 2014-04-14 11:41 |只看该作者
怎没人回复啊?求帮忙啊

论坛徽章:
11
技术图书徽章
日期:2014-03-01 14:44:34天蝎座
日期:2014-05-21 22:11:59金牛座
日期:2014-05-30 17:06:14
3 [报告]
发表于 2014-04-14 11:48 |只看该作者
回复 2# 风花雪月13
什么状况?贴下
OS信息"uname -a"
gcc信息“gcc --version”,顺便吧编译的命令贴下
glibc信息"/lib/libc.so.6",具体看你系统libc放的位置

论坛徽章:
4
白羊座
日期:2013-09-17 21:59:30技术图书徽章
日期:2013-10-12 22:16:03白羊座
日期:2013-10-14 11:01:40双子座
日期:2013-12-17 18:26:39
4 [报告]
发表于 2014-04-14 12:10 |只看该作者
网上拷贝的?

论坛徽章:
0
5 [报告]
发表于 2014-04-14 13:14 |只看该作者
回复 3# timespace
不太明白你的意思,编译命令我写的是gcc -o server server.c `pkg-config --cflags --libs gtk+-2.0`,编译是通过了,可是运行输入./server就出现提示“thread not supported“

   

论坛徽章:
0
6 [报告]
发表于 2014-04-14 13:14 |只看该作者
回复 4# 井蛙夏虫
嗯嗯 是的

   

论坛徽章:
4
白羊座
日期:2013-09-17 21:59:30技术图书徽章
日期:2013-10-12 22:16:03白羊座
日期:2013-10-14 11:01:40双子座
日期:2013-12-17 18:26:39
7 [报告]
发表于 2014-04-14 15:33 |只看该作者
if(!g_thread_supported())
     g_thread_init(NULL);
   else
     g_print("thread not supported\n");
看这好像是不支持的话调用g_thread_init
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP