⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 minigui.txt

📁 这是一个在minigui下面用來实现曲线动态显示功能的一段代碼
💻 TXT
📖 第 1 页 / 共 3 页
字号:
            LineTo(neicun_hdc,Lianjie[0][i],20+(i-1)*10);
    }
    for( i=0;i<12;i++)                               //一象限画横坐标 
    {
            MoveTo(neicun_hdc,66+i*16,146);
            LineTo(neicun_hdc,66+i*16,142);
    } 
    for( i=0;i<8;i++)                               //一象限画纵坐标 
    {
            MoveTo(neicun_hdc,66,143-i*16);
            LineTo(neicun_hdc,70,143-i*16);
    }       
    MoveTo(neicun_hdc,271,146);
    LineTo(neicun_hdc,258,142);
    BitBlt(neicun_hdc, 66, 24, 205,123,pHuanXian->XC_hdc,66,24,0);                
    //--------------------------------------------------------------------------------
    FillBox (neicun_hdc, 366, 24, 205, 123);
    for( i=1;i<LIANJIEDIANSHU;i++)                       //二象限画曲线 
    {
            MoveTo(neicun_hdc,Lianjie[1][i-1],20+(i-1)*10);
            LineTo(neicun_hdc,Lianjie[1][i],20+(i-1)*10);
    }
    for( i=0;i<12;i++)                       //二象限画横坐标 
    {
            MoveTo(neicun_hdc,365+i*16,146);
            LineTo(neicun_hdc,365+i*16,142);
    } 
    for( i=0;i<8;i++)                       //第二限画纵坐标 
    {
            MoveTo(neicun_hdc,365,146-i*16);
            LineTo(neicun_hdc,369,146-i*16);
    }       
    MoveTo(neicun_hdc,571,146);
    LineTo(neicun_hdc,558,142);
    BitBlt(neicun_hdc, 366, 24, 205,123,pHuanXian->XC_hdc,366,24,0);                
    //--------------------------------------------------------------------------------   
    FillBox (neicun_hdc, 67, 215, 205, 123);
    for( i=1;i<LIANJIEDIANSHU;i++)                       //三象限画曲线 
    {
            MoveTo(neicun_hdc,Lianjie[2][i-1],20+(i-1)*10);
            LineTo(neicun_hdc,Lianjie[2][i],20+(i-1)*10);
    }
    for( i=0;i<12;i++)                       //三象限画横坐标 
    {
            MoveTo(neicun_hdc,67+i*16,339);
            LineTo(neicun_hdc,67+i*16,335);
    } 
    for( i=0;i<8;i++)                       //第三限画纵坐标 
    {
            MoveTo(neicun_hdc,67,339-i*16);
            LineTo(neicun_hdc,70,339-i*16);
    } 
    MoveTo(neicun_hdc,272,338);
    LineTo(neicun_hdc,258,334);    
    BitBlt(neicun_hdc, 67, 215, 205,123,pHuanXian->XC_hdc,67,215,0);    
        
    //--------------------------------------------------------------------------------    
    FillBox (neicun_hdc, 368, 220, 205, 123); 
    for( i=1;i<LIANJIEDIANSHU;i++)                       //四象限画曲线 
    {
            MoveTo(neicun_hdc,Lianjie[3][i-1],20+(i-1)*10);
            LineTo(neicun_hdc,Lianjie[3][i],20+(i-1)*10);
    }
    for( i=0;i<12;i++)                       //四象限画横坐标 
    {
            MoveTo(neicun_hdc,368+i*16,343);
            LineTo(neicun_hdc,368+i*16,339);
    } 
    for( i=0;i<8;i++)                       //第四限画纵坐标 
    {
            MoveTo(neicun_hdc,368,343-i*16);
            LineTo(neicun_hdc,372,343-i*16);
    } 
    MoveTo(neicun_hdc,573,343);
    LineTo(neicun_hdc,560,339);    
    BitBlt(neicun_hdc, 368, 220, 205,123,pHuanXian->XC_hdc,368,220,0);                
    //--------------------------------------------------------------------------------         
    DeleteCompatibleDC(neicun_hdc);
      
}
/*
************************************************************************************************************************
**函数原型    :      void init(struct prodcons * b)
**参数说明    :      自定义结构变量,包含互斥量等 
**返回    值    :    
**创   建   人: 
**最后修改日期: 2006年1月19日
**描        述: 初始化线程包括互斥锁和条件变量读写指针等 
************************************************************************************************************************
*/
static void init(struct prodcons * b)//初始化 
{
     pthread_mutex_init(&b->lock, NULL);//初始化互斥锁 
     pthread_cond_init(&b->notempty, NULL);//初始化条件变量 
     pthread_cond_init(&b->notfull, NULL);//初始化条件变量 
     b->readpos = 0;//读指针为0 
     b->writepos = 0;//写指针为0 
}
/*
************************************************************************************************************************
**函数原型    :      void * producer(void * data)
**参数说明    :      传递的参数由创建函数给出 
**返回    值    :    NULL 
**创   建   人: 
**最后修改日期: 2006年1月19日
**描        述: 线程函数写入公共缓冲区数据 
************************************************************************************************************************
*/
static void * producer(void * data)
{

   sockfd=socket(AF_INET,SOCK_STREAM,0);
    if(sockfd<0)
    {
        printf("error in socket\n");
        exit(1);
    }
    else
    {    
        printf("socket ok!\n");
    }
     //填写服务器的套接字(本机)
    if((hp=gethostbyname("localhost"))==NULL)
       printf("err   gethostbyname\n");
       
    bcopy((char *) hp->h_addr,(char *) &my_addr.sin_addr,hp->h_length);

    my_addr.sin_family=AF_INET;
    my_addr.sin_port=htons(IPPORT_USERRESERVED+RECEIVER_PORT);
    printf("receive from port  %d\n",my_addr.sin_port);
   
    bzero(&(my_addr.sin_zero),8);
    
    //绑定监听套接字 
    ret=bind(sockfd,(struct sockaddr *)&my_addr,sizeof( my_addr));
    
    if(ret<0)
    {
        printf("error in binding\n");
        exit(1);
    }
    else
    {
         printf("bind  ok!\n");    
    }
   //监听连接请求
    ret=listen(sockfd,BACKLOG);
    if(ret<0){
       printf("error in     listening");
       exit(1);
    }
    else
    {
       printf("listen ok!\n");
    }
    //设置select()有关参数 
    maxfd=sockfd;
    maxi=-1;
    for(i=0;i<MAXSELECT;i++)
    {
           client[i]=-1;                       
    }
    FD_ZERO(&allset);
    FD_SET(sockfd,&allset);       
    while(1)
    {
            rset=allset;
            //选择,nready记录可读的文件个数
            nready=select(maxfd+1,&rset,NULL,NULL,NULL);
            //处理来自监听套接字的请求]
            if(FD_ISSET(sockfd,&rset)) 
        {
                printf("sockfd  %d\n",sockfd); 
        //建立新的连接
                 sin_size=sizeof(struct sockaddr_in);
                 con_fd=accept(sockfd,(struct sockaddr *)&their_addr,&sin_size);
                 if(con_fd<0) 
         {
                    printf("error in accept");
                    continue;
                 }
                for(i=0;i<MAXSELECT;i++)
        { 
             //如果已经到达规定的select处理的上限,就不监听该端口
                     if(i==MAXSELECT)
                     {
                          printf("too manyclients");
                              continue;
                     }
                     //更新select有关参数
                     FD_SET(con_fd,&allset);
                     if(con_fd>maxfd)  maxfd=con_fd;
            if(i>maxi) maxi=i;
                        //如果所有的描述符都已处理,进入下一次循环
                        if(--nready<0) continue;
                     //把新的连接描述符插入到client数组中的适当位置
            if(client[i]<0)
                      {
                            client[i]=con_fd;
                            printf("client[i]=  %d, i= %d\n",client[i],i );
                            break;
                      }

        }
              }    
            //处理来自连接套接字的事件
           for(i=0;i<maxi+1;i++)
           {
            //如果套接字不存在则处理下一个套接字
               if((sock=client[i])<0)
        {
            continue;
                }
            
        //printf("sock= %d,client[i]= %d,i= %d\n",sock,client[i],i);
    

          //如果存在,检查是否有来自该套接字的请求,并处理
               if(FD_ISSET(sock,&rset))
           {
                    if(recv(sock,recvs,MAXSIZE,0)==0)
                     {
                        close(sock);
                      FD_CLR(sock,&allset);
                      client[i]=-1;
                    }
                    else
                    {
                       //数据处理代码 
                       put(&buffer,recvs);
                       printf("收到的数据是:%s\n",recvs);
                       send(client[i],"年已经过了!",12,0);
                    }
                    //如果描述符未处理,进入下一次循环
                  // if(--nready<=0) break;
        }
    /*    else
        {
                    printf("FD_ISSET\n");

        }*/
         }
         } 
          close(sockfd);
          exit(0);
}
/*
************************************************************************************************************************
**函数原型    :      void put(struct prodcons * b, int data)
**参数说明    :      prodcons:自定义结构变量,包含互斥量等 ,data:写入的数据 
**返回    值    :    
**创   建   人: 
**最后修改日期: 2006年1月19日
**描        述: 往公共缓冲区写入一个整型数据 
************************************************************************************************************************
*/
static void put(struct prodcons * b, char * data)
{
     pthread_mutex_lock(&b->lock);//取得互斥量 
     while ((b->writepos + 1) % BUFFER_SIZE == b->readpos) {
     printf("wait for not full\n");
     pthread_cond_wait(&b->notfull, &b->lock);//缓冲区不满则跳出否则等待 
     }
     b->buffer[b->writepos] = data;//写数据 
     b->writepos++;
     if (b->writepos >= BUFFER_SIZE) b->writepos = 0;
     pthread_cond_signal(&b->notempty);//设置条件 
     pthread_mutex_unlock(&b->lock);//解锁 
}
/*
************************************************************************************************************************
**函数原型    :      static get(struct prodcons * b)
**参数说明    :      prodcons:自定义结构变量,包含互斥量等 
**返回    值    :    读出的整型数据 
**创   建   人: 
**最后修改日期: 2006年1月19日
**描        述: 从公共缓冲区读出一个整型数据 
************************************************************************************************************************
*/
static char * get(struct prodcons * b)
{
    char * data;
    pthread_mutex_lock(&b->lock);//取得互斥量 
    while (b->writepos == b->readpos) {
    printf("wait for not empty\n");
    pthread_cond_wait(&b->notempty, &b->lock);//缓冲区不空则跳出否则等待条件 
    }
    data = b->buffer[b->readpos];
    b->readpos++;
    if (b->readpos >= BUFFER_SIZE) b->readpos = 0;
    pthread_cond_signal(&b->notfull);//设置条件
    pthread_mutex_unlock(&b->lock);//解锁 
    return data;
}
#ifndef _LITE_VERSION
#include <minigui/dti.c>
#endif




⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -