Pokaż wyniki 1 do 8 z 8

Temat: Dodawanie wartosci do tablic i sprawdzanie jej

  1. #1

    Domyślnie [PERL] Dodawanie wartosci do tablic i sprawdzanie jej

    Witam mam kolejny problem którego tak naprawdę nie wiem jak rozwiązać
    mianowicie mam kod:
    Kod:
    @tablica = ();
    sub pokaz_tablice {
    	while (1) {
    		print "pokazuje tablice \n";
    		for (my $v = 0; $v <= $#tablica; $v++) {
    			print $tablica[$v]," lap\n";
    		}
    		sleep(1);
    	}
    }
    
    sub add_table {
    	my $z = 0;
    	while($z <= 10) {
    		print "laduje tablice\n";
    		$tablica[$z] = "dane";
    		sleep(5);
    $z++;
    	}
    }
    $pid = fork();
    if ($pid == 0) { add_table(); }
    $pid = fork();
    if ($pid == 0) { pokaz_tablice(); }
    Na pierwszy rzut oka jak widać odpala się funkcja "add_table" która dodaje zmienną i w tym czasie startuje funkcja która wyświetla te dane cały sęk w tym że funkcja "pokaz_tablice" nie pokaże ani jednej wartości póki funkcja add_table nie przestanie działać czy umie ktoś taki problem rozwiązać ? Czy to w ogóle możliwe ?

    Dziękuje z góry za odpowiedź.
    Ostatnio edytowane przez szlagus : 03-20-2012 - 12:06

  2. #2
    Zarejestrowany
    Jun 2006
    Skąd
    rand(.eu)
    Postów
    8,748

    Domyślnie

    Na poczatku kodu daj $|++ co oznacza wylaczenie buforowania wejscia/wyjscia. Domyslnie zmienna ma wartosc 0, ale jak ustawisz $|=1 (albo ++) to buforowanie jest wylaczone i jak program zrobi print() to momentalnie zobaczysz efekt.
    ctrl-alt-del.cc - soft reset site for IT admins and other staff :-)

  3. #3

    Domyślnie

    Dodałem to na samej górze kodu nie dało efektu próbowałem też w różnych miejscach to dodawać ale nie idzie

  4. #4
    Zarejestrowany
    Jun 2006
    Skąd
    rand(.eu)
    Postów
    8,748

    Domyślnie

    Sorry... teraz zauwazylem dopiero ze przeciez forkujesz skrypt, wiec funkcje odpalaja sie w osobnych procesach wiec nie wspoldziela tablicy - kazdy proces ma swoja kopie tablicy tak jak ona wygladala w momencie startu procesu.
    Jesli to co chcesz osiagnac to efekt ze jeden proces wpisuje dane do tablicy a drugi je wyswietla to to nie jest wlasciwa droga.
    ctrl-alt-del.cc - soft reset site for IT admins and other staff :-)

  5. #5

    Domyślnie

    I nie jest to możliwe do wykonania że jedna funkcja dodaje wartości a druga je wyczytuje ?
    Jeśli nie to jak można zrobić coś "podobnego" ?
    Ostatnio edytowane przez szlagus : 03-22-2012 - 14:18

  6. #6
    Zarejestrowany
    Jun 2006
    Skąd
    rand(.eu)
    Postów
    8,748

    Domyślnie

    IPC, sockety, TCP/IP (klient-serwer)... ewentualnie thread'y ale to moim zdaniem proszenie sie o problemy. Generalnie zmienne uzywane przez dwa rozne procesy ZAWSZE powinny byc rozdzielone i proces A nie powinien miec dostepu do zmiennych procesu B.

    Jesli chcesz aby gadaly w ten sposob to zastosuj jakis protokol komunikacji miedzy nimi i problem rozwiazany.
    ctrl-alt-del.cc - soft reset site for IT admins and other staff :-)

  7. #7

    Domyślnie

    Klient-server czyli jedna funkcja odpala server druga klient klient wysyła do servera informacje o dodaniu do tablicy danych server ją dodaje i dopiero klient sobie wczytuje ?

    Na threadach coś mi własnie nie szło.
    Musze jeszcze zobaczyć to "IPC".

  8. #8
    Zarejestrowany
    Jun 2006
    Skąd
    rand(.eu)
    Postów
    8,748

    Domyślnie

    Klient i serwer to moga byc dwa osobne programy w sumie i to jak sie komunikuja zalezy od tego jak to sobie wymyslisz - moga nawet gadac przez pliki na dysku jesli zechcesz, przez TCP albo wiadomosci wysylane do Amazon AWS (np SQS) - mozna to zrobic tak prosto albo tak skomplikowanie jak zechcesz ale zazwyczaj TCP albo lokalny socket to dosc dobre wyjscie.
    ctrl-alt-del.cc - soft reset site for IT admins and other staff :-)

Zasady Postowania

  • Nie możesz zakładać nowych tematów
  • Nie możesz pisać wiadomości
  • Nie możesz dodawać załączników
  • Nie możesz edytować swoich postów
  •  
Subskrybuj