Torna indietro   Hardware Upgrade Forum > Software > Programmazione

Marvel's Wolverine, la recensione: Logan torna protagonista in un'avventura brutale e intensa
Marvel's Wolverine, la recensione: Logan torna protagonista in un'avventura brutale e intensa
Marvel's Wolverine porta Logan in un'avventura inedita, violenta e fortemente narrativa, costruita attorno alla sua natura di combattente e al difficile rapporto con il proprio passato. Insomniac Games punta su combattimenti spettacolari, progressione e personalizzazione, inserendo l'azione in un mondo segnato dalla persecuzione dei mutanti. Un viaggio intenso, che alterna mattanza, esplorazione e momenti sorprendentemente emotivi.
DJI Romo 2: tante novità lo rendono un robot completo
DJI Romo 2: tante novità lo rendono un robot completo
Romo 2 è la seconda generazione di robot lavapavimenti di DJI, un modello che si caratterizza per la precisione nel sistema di navigazione e per il funzionamento particolarmente silenzioso. Con le modifiche introdotte in questa seconda versione, e un posizionamento di prezzo più allineato alla concorrenza, rappresenta una valida alternativa sul mercato delle soluzioni di pulizia domestica
Sony Bravia 9 II: il True RGB alla prova, dove l'LCD sfida l'OLED
Sony Bravia 9 II: il True RGB alla prova, dove l'LCD sfida l'OLED
Il primo Sony con retroilluminazione True RGB alla prova del banco di misura e dei contenuti: luminanza enorme, colori accurati in HDR e un antiriflesso molto efficace. I limiti sono due sole HDMI 2.1 e il blooming fuori asse
Tutti gli articoli Tutte le news

Vai al Forum
Rispondi
 
Strumenti
Old 23-01-2010, 20:29   #1
ginter87
Member
 
Iscritto dal: Apr 2008
Messaggi: 62
[C] Aiuto Controllo Codice - Thread status NULL

Innanzitutto vi allego il codice server. Ho un pò di problemi perche durante l'esecuzione dovrebbe in teoria permettermi di caricare l'array di stringhe, poi creare il socket e mettersi ina attesa di connessione

solo che si ferma al thread che non m fa caricare nemmeno l'arry ... e termina con status null



Codice:
#include <stdio.h> // per I/O

#include <stdlib.h> // per exit, malloc, atoi...

#include <unistd.h> // per exec, getpid...

#include <pthread.h> // thread

#include <semaphore.h> //semafori posix

#include <sys/types.h> // standard posix
#include <netinet/in.h>

#include <sys/socket.h> // socket

#include <signal.h> // segnali

#include <string.h>
#include <pthread.h>
#include "common.h"

#define totpost 20 

#define MAX 10 //numero domande
#define LEN 1023 //caratteri per riga: 1023+0\


char domande[MAX][LEN+1]; //tabella caricata con domande e risposte

void *caricamento(void *arg); //funzione svolta dal thread1

int sd,i ;
int tab[totpost][2];
struct sockaddr_in server_addr;    // struttura dati di configurazione

struct sockaddr_in client_addr;

socklen_t client_len;



int main(int argc, char *argv[])

{

  printf("Server avviato con pid = %d\n", getpid());

  int i;
  //THREAD
        int res;
	pthread_t thread1; //primo thread per il caricamento
	void * thread_result;
	res=pthread_create(&thread1, NULL, caricamento,NULL);
	if (res!=0) 
	{	perror("\n****ERRORE CREAZIONE THREAD***\n");
		exit(1);
	}
	printf("Aspetto che il caricamento sia completato...\n");
	res=pthread_join(&thread1, &thread_result); //come la wait

	printf("thread1 terminato con stato: %s\n", (char*) thread_result);
	exit(EXIT_SUCCESS);
  

  //SOCKET	
  int client_sd[totpost];

  // preparazione dei dati relativi al bind

  server_addr.sin_family = AF_INET;

  server_addr.sin_port = htons(PORT); //host to network

  server_addr.sin_addr.s_addr = INADDR_ANY;

  client_len = sizeof(struct sockaddr_in);

  	
  	int sd=socket(AF_INET, SOCK_STREAM, 0);//restituisce l'identificativo del socket
	if(sd<0) 
		{	
 		perror("creazione socket errata!!\n");
		exit(-1);
	 	}
  	printf("Effettuo la bind del socket con la porta ds\n", PORT);

  	if (bind(sd, (const struct sockaddr *) &server_addr, client_len) < 0)

    		{

      		perror("Durante il bind\n");

      		exit(1);

    		}

  

  	printf("Mi metto in attesa di connessioni sulla porta %d\n", PORT);

  	if (listen(sd, 20) < 0)		//max 20 client

    		{

      		perror("Durante il listen");

      		exit(1);

    		}



  	printf("Entro nel ciclo infinito in cui accetto connessioni\n");



  	while (1)

    		{
		// itero il tutto cn un ciclo for ke crea un sd dedicato per ogni client accettato
		for(i=0;i<totpost;i++)
		{	
		pid_t pid = fork();

		if (pid == 0)
      			{
			printf("sono il servente: %d\n",getpid()); //figlio ke s collega con il client
		      	client_sd[i] = accept(sd, (struct sockaddr *) &client_addr, &client_len);
      			if (client_sd[i] < 0)
      				{
      				perror("Durante l'accept\n");
      				exit(1);
      				}	
			//close(sd);			
			printf("Connessione con client accettata sul socket %d\n", client_sd[i]);

			tab[i][0]=getpid();
			tab[i][1]=client_sd[i];
			}
		else
			{
			printf("\n\n ERRORE FORK\n\n");
			exit(1);
			}
	   	 }

//manca una grossa parte di codice ke riguarda la gestione delle send e delle receive e del confronto
//printf("Chiudo il socket %d dedicato con il client\n", client_sd[i]);

//close(client_sd[i]);
//exit(0);
	}
}


void *caricamento(void *args) //thread1 caricamento domande
{
char s[1024];
int k;
int risp;
for(k=0; k<MAX; k++)
{
	do{
		printf("Inserisci la %d domanda e le 4 risposte\t \n", i+1);
		gets(s);
		if(strlen(s)==0)
		{
			printf("ERRORE: STRINGA VUOTA!! REINSERIRE DATI.");
			k--;
		}
		else if(strlen(s)>LEN)
		{
			printf("ERRORE: STRINGA TROPPO GRANDE!! REINSERIRE DATI.");
			k--;
		}
		printf("Sei sicuro di voler salvare le domande? Se si premi 1 altrimenti premi 0\n");
		scanf("%d", &risp);
	}while(risp==0);
	strcpy(domande[k], s);
}

sleep(30);

}

IGNORATE gli sleep ... li ho messi a caso


perciò. dove sbaglio????
ginter87 è offline   Rispondi citando il messaggio o parte di esso
 Rispondi


Marvel's Wolverine, la recensione: Logan torna protagonista in un'avventura brutale e intensa Marvel's Wolverine, la recensione: Logan torna p...
DJI Romo 2: tante novità lo rendono un robot completo DJI Romo 2: tante novità lo rendono un ro...
Sony Bravia 9 II: il True RGB alla prova, dove l'LCD sfida l'OLED Sony Bravia 9 II: il True RGB alla prova, dove l...
Geely EX5, un mese al volante: il SUV elettrico cinese che ci ha sorpreso (quasi) senza riserve Geely EX5, un mese al volante: il SUV elettrico ...
Mova Z70 Ultra Roller Complete: motore potente, rullo di lavaggio e l'IA a guidare Mova Z70 Ultra Roller Complete: motore potente, ...
Roblox sfida l'ecosistema gaming: app st...
OpenAI accusata di plagio dai migliori m...
Altro attacco hacker dell'IA: gli agenti...
Stiamo davvero perdendo il controllo del...
Microsoft perde un pilastro: Frank Shaw ...
Diablo V annunciato a sorpresa: il colpo...
Meno di 5 euro per il 5G: l'offerta Kena...
World of Warcraft: Forever è il Classic+...
La Serie A con DAZN e Amazon Prime con l...
Giochi Ubisoft su Steam senza Ubisoft Co...
Miami Beach ha autorizzato la maxi opera...
Apple regala un altro anno di funzioni s...
Alla fine è successo davvero: Vol...
Il meglio di Amazon del weekend in uno s...
Speciale TV in offerta su Amazon: Hisens...
Chromium
GPU-Z
OCCT
LibreOffice Portable
Opera One Portable
Opera One 106
CCleaner Portable
CCleaner Standard
Cpu-Z
Driver NVIDIA GeForce 546.65 WHQL
SmartFTP
Trillian
Google Chrome Portable
Google Chrome 120
VirtualBox
Tutti gli articoli Tutte le news Tutti i download

Strumenti

Regole
Non Puoi aprire nuove discussioni
Non Puoi rispondere ai messaggi
Non Puoi allegare file
Non Puoi modificare i tuoi messaggi

Il codice vB è On
Le Faccine sono On
Il codice [IMG] è On
Il codice HTML è Off
Vai al Forum


Tutti gli orari sono GMT +1. Ora sono le: 11:47.


Powered by vBulletin® Version 3.6.4
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.
Served by www3v