コード例 #1
0
ファイル: demo.c プロジェクト: dcposch/simple_spheres
int main(int argc, char **argv){

    /* initialize sdl */
    if (SDL_Init(SDL_INIT_VIDEO) < 0){
        perror("could not initialize sdl");
        return 1;
    }
    SDL_ShowCursor(SDL_DISABLE);
    SDL_WM_SetCaption("simple raytracer demo", "");
    SDL_Surface *screen = 
        SDL_SetVideoMode(WIDTH, HEIGHT, BPP*8, SDL_HWSURFACE|SDL_DOUBLEBUF);
    if(!screen)
    {
        perror("could not set video mode");
        SDL_Quit();
        return 1;
    }

    /* initialize graphics state */
    graphics_state state;
    state.screen = screen;
    if(init_model(&state) != 0) return -1;
    if(init_lights(&state) != 0) return -1;
    if(init_graphics(&state) != 0) return -1;
    if(init_worker_threads(&state) != 0) return -1;

    /* main loop */
    int run = 1;
    float ema_nanos = 0, ema_nanos2 = 0, max_nanos = 0;
    long start_time;
    start_time = now();
    while(run){

        /* change the scene */
        timestep(&state);

        /* render the scene */
        if(draw_screen(&state)){
            perror("render error");
            return 1;
        }

        /* performance metrics */
        state.frame++;
        long nanos = now()-start_time;
        ema_nanos = 0.9f*ema_nanos + 0.1*nanos;
        ema_nanos2 = 0.9f*ema_nanos2 + 0.1*nanos*nanos;
        if(nanos > max_nanos) max_nanos = nanos;
        if(state.frame % 10 == 0){
            float stdev_nanos = sqrtf(ema_nanos2 - ema_nanos*ema_nanos);
            float fps = 1000000000 / ema_nanos;
            float fps_sigma = 1000000000 / (ema_nanos + stdev_nanos);
            float fps_worst = 1000000000 / max_nanos;
            printf("%.2f +/- %.2f (worst: %.2f) fps\n", 
                fps, fps-fps_sigma, fps_worst);
            max_nanos = 0;
        }
        start_time = now();
        int sleep_us = TARGET_US - nanos/1000;
        if(sleep_us > 0)
            usleep(sleep_us);

        /* check if we need to exit */
        SDL_Event event;
        while(SDL_PollEvent(&event)) 
        {
            if(event.type == SDL_QUIT || event.type == SDL_MOUSEBUTTONDOWN){
                run = 0;
                break;
            }
        }
    }

    /* reset resolution to normal, exit */
    SDL_Quit();
    return 0;
}
コード例 #2
0
ファイル: proxy.cpp プロジェクト: zx5337/proxy
int main(int argc, const char * argv[]) {
    // insert code here...
    struct sockaddr_in servaddr, cliaddr;
    socklen_t cliaddr_len;
    int listenfd, connfd;
    int ret = 0;
    char s[INET6_ADDRSTRLEN];
    int serv_port;
    
    
    
    if (argc != 2) {
        fputs("usage: ./porxy port\n", stderr);
        exit(1);
    }
    sscanf(argv[1],"%d",&serv_port);
    signal(SIGTERM, cleanExit);
    signal(SIGINT, cleanExit);
    signal(SIGPIPE, SIG_IGN);
    
    listenfd = socket(AF_INET, SOCK_STREAM, 0);
    
    bzero(&servaddr, sizeof(servaddr));
    servaddr.sin_family = AF_INET;
    servaddr.sin_addr.s_addr = htonl(INADDR_ANY);
    servaddr.sin_port = htons(serv_port);
    
    ret = bind(listenfd, (struct sockaddr *)&servaddr, sizeof(servaddr));
    if(ret == -1){
        printf("Bind socket error: errno=%d port=%d\n",errno,serv_port);
        return 0;
    }
    
    ret = listen(listenfd, 20);
    if(ret == -1){
        printf("Listen socket error: errno=%d port=%d\n",errno,serv_port);
        return 0;
    }
    
    /*
    int n = 1;
    setsockopt(listenfd, SOL_SOCKET, SO_NOSIGPIPE, &n, sizeof(n));
    */
    printf("Proxy Server started port:%d, accepting connections ...\n",serv_port);
    
    RequestQueue *queue = new RequestQueue();
    init_worker_threads(queue);
    while (1) {
        
        
        cliaddr_len = sizeof(cliaddr);
        connfd = accept(listenfd,(struct sockaddr *)&cliaddr, &cliaddr_len);
        if (connfd == -1) {
            if (errno == EINTR)//continue by system interupt
                continue;
            else {
                
                printf("Accept socket error: errno=%d port=%d\n",errno,serv_port);
                return 0;
            }
        }
        
        inet_ntop(cliaddr.sin_family,
                  get_in_addr((struct sockaddr *)&cliaddr),
                  s, sizeof s);
        //printf("Proxy Server accept connection from %s  sockID: %d\n", s ,connfd);
        
        //thread pool or request queue
        queue->Push(connfd);
        
        
        
    }
    return 0;
}