[Powered by Google Translate] Nate HARDISON: Kad imaš više programa otvoriti na
računalo, čini se kao da je sve u
prikazivati ​​u isto vrijeme.
Na primjer, možda ćete raditi u web pregledniku poput
Firefox ili Internet Explorer, slušanje glazbe na iTunes,
i pisanje eseja s Riječi.
Međutim, ispod haube, programi zapravo
pokrenuti jednu po jednu.
To je posao za operativni sustav Windows, Mac OSX, ili
Linux, upravljati svaki od tih odvojenih procesa, kao
Programi su poznati, a prebacivanje između njih, tako da kada
otići iz provjere svoj Facebook stranicu radi na svom eseju
opet, riječ je onaj koji je pokrenut.
>> Ponekad, ipak, želimo programe sami moći
učiniti više stvari kao što je ovaj, previše.
Ako ste poput mene, vjerojatno imate hrpu
različite kartice otvoriti u vašem web pregledniku, jedan za e-poštu,
jedan s kalendarom, i tako dalje.
Mi smo mogli liječiti svaku karticu kao zasebna programa ili procesa,
poput Google Chrome radi, ali mnogi programi koriste
upaljač težina verzija procesu koji se zove nit.
>> Nit je samo još jedan uređaj prerade, set
upute ili kod koji se može "pokrenuti", citat završiti citat,
istodobno s drugim nitima.
To je ono što ga čini moguće za vas da pregledate Facebook
dok slušate mene u pozadini ili da imaju dva
YouTube videa igrati u isto vrijeme.
Dakle, ova opća tema, poznat kao podudarnosti, obično
ne dolazi do tako rano u računalnih znanosti tečajeve
jer niže razine pojedinosti zahtijevaju raspravu
operativni sustavi i slično.
Međutim, programski jezik mi koristimo na
počevši od CS50, Scratch, daje neke divan alate za
lakše pisati programe s više stvari
događa odjednom.
>> Kada izgraditi Bloka programe, ti si stalno
rad s nitima.
Svaki Scratch skripta, koja je kod blok koji počinje s
jedan od "kada" slagalice, može se smatrati
kao zasebna nit.
Pogledajmo jednostavan Scratch programa vidjeti kako se to radi.
>> Evo, imamo riblji objekt, ili Sprite, sa dvije skripte
da i početak kad smo kliknite na malu zelenu tipku zastave.
Prva skripta kontrolira ribe prijedlog.
Kada je zelena zastava je kliknuo je riba dobiva stavljen
na lijevoj strani zaslona, ​​pozvao na pozornicu,
usmjeren na desno.
Zatim, u skup uputa koje će pokrenuti zauvijek, dok smo
zaustaviti program, riba klizi na desnoj strani,
okrene, ide natrag na lijevoj strani, a
okrene opet.
Drugi scenarij kontrolira ribe misaoni proces.
Ispada da je to gladni ribe.
Dakle, nakon čeka tri sekunde, riba će misliti,
"Gladan sam", za četvrti drugi.
Ova skripta također radi zauvijek.
A kao što smo vidjeli, od pokretanja programa klikom na
zelena zastava, oba pisma pojaviti izvršiti
istovremeno.
Riba se kreće i misli u isto vrijeme.
>> Budući da siromašni riba izgleda tako gladni, dodajmo u nekim
cheesy puffs za to jesti.
Nadam se da neće raspasti u vodi.
Kada dodamo u drugi sprite, također ćemo biti u mogućnosti da
dodajte u skripti odgovaraju tom sprite.
I, stoga, tu će biti još jedan set
teme koje će izvoditi.
Kako bi korisnik našeg programa kontrole nad kada
gladna riba dobiva hranu, recimo da kad god Space
Bar je pogodio, sirast nadima se pojaviti na pozornici za
riba za jesti.
Prije nego što smo pogodak razmak, da ćete želite zadržati cheesy
nadima skriven, tako da se riba ne može ih vidjeti.
Da biste to učinili, morat ćemo nekoliko skripti za
cheesy nadima duh.
Prva skripta, zelena zastava, samo će se sakriti hranu.
Za razliku od drugih skripti smo napisali, to nitko ne će zadržati
trčanje zauvijek.
To će početi i završiti vrlo brzo, u pravu kada mi kliknite
zelena zastava gumb.
>> Sljedeći skripta imamo će čekati da razmak biti
pritisnuta prije izvršenja.
Možemo to nazvati čeka korisničkog unosa "na čekanju" ili "slušati"
za događaj.
I kod koji izvršava kada događaj je primio ili
Čuo se zove događaj rukovanje kod.
Naš razmak rukovatelj događaj će pokazati cheesy puffs na
zaslon, tako da se riba može ih jesti.
U ovom trenutku, sve je izgleda dobro.
>> Sljedeći stvar koju trebate učiniti je shvatiti kako doći
riba shvatiti da postoji hrana za jesti.
Dodajmo još nit na ribe koje se stalno
provjerava da li ili ne to je dodirujući cheesy puffs.
Mi to u zasebnom thread jer na taj način možemo
stalno provjeravati za hranu.
Inače, mi smo samo bih biti u mogućnosti da povremeno provjerite za hranu
između zmajem, okrećući se, čeka, ili razmišljanje.
>> OK.
Sada ćemo pokrenuti naš Scratch program.
Kao što se očekivalo, hrana odmah skriva i
gladni ribe pliva natrag i naprijed baš kao i prije.
Kada smo pogodak Space Bar, cheesy nadima doći u prikazu,
i gladni ribe, kaže sova.
Ali čekajte, to je čudno.
Kako doći ribe je "Gladan sam", pomisli prekida
druge stvari?
To je zato što mi nije uvela nikakvu koordinaciju
između tri ribe skripti.
Svaki se izvodi u vlastitom thread, nesvjesni da ono što
drugi rade.
Ajmo ovo popraviti prije nego što smo krenuti dalje.
>> Koordinacija između niti je lukav zadatak jer mi
nemaju eksplicitnu kontrolu nad kada je svaka nit vodi ili
ne izvoditi.
Za slanje poruke iz jednog u drugi thread, morat ćemo
koristiti varijablu da možemo postaviti, ili pisati u jednom thread
i čitati u drugi.
Idemo stvoriti varijablu pod nazivom foodFound da možemo postaviti na
istina kada je riba radi u cheesy dimova.
Pa, naravno, želimo biti sigurni da ćemo ga postaviti na
false početku.
Zatim, u ribe razmišljanja nit, mi ćemo provjeriti da li
riba je pronašao hranu prije prikazivanja "ja sam gladan"
Mislio mjehur.
>> Sada, izvodi program opet, vidimo da je riba
ne bi prekinuo s mislima gladi kada
cheesy puffs su out.
Konačna Problem koji imamo je da cheesy nadima ne ide
daleko nakon ribe, citiram Citat završen, "jede" im.
Od ribljih skripti, nema jednostavan način za skrivanje cheesy
nadima, tako da ćemo morati poslati poruku cheesy dimova
Sprite da se sakrije.
Mogli smo to učiniti s nekom drugom varijablom da cheesy nadima
Sprite ima pristup, kao i ribe Sprite.
>> Međutim, tu je čišći način da to učinite je u ovom slučaju,
jer umjesto da šalje poruku na scenariju koji je
negdje u sredini izvršenja, možemo poslati
Poruka skriptu koja čeka na početak.
Mi to učiniti tako da ribu emitirati događaj, jedan ćemo
nazovite jede.
Zatim ćemo napraviti skriptu za cheesy dimova koji će
čekati za taj događaj.
To je slično slučaju Space Bar, osim da je to
vrijeme, korisnik je ne jednom izravno pokreće događaj.
Sada sve što morate učiniti je postaviti naš foodFound varijabla natrag
na False, a sada možemo dati gladnu ribu kao i mnogi
porcije cheesy dimova kao što želi.
>> Dakle, nije previše loše, zar ne?
U C, pisanje multi-navojem programa je složeniji,
ali osnove su iste.
U svakom slučaju, nadam se da ćete imati velik vrijeme izgradnje neke zabave
istodobnih programa u nule.
Moje ime je Nate Hardison.
Ovo je CS50.