[Powered by Google Translate] Nate HARDISON: Kiam vi havas plurajn programojn malfermi sur
komputilo, ĝi similas ĉio
kurante al la sama tempo.
Ekzemple, vi povus labori en retumilo kiel
Firefox aŭ Internet Explorer, aŭskultante al la muziko en iTunes,
kaj verkas eseon kun Word.
Tamen, sub la kapuĉo, la programoj reale
kuri unuope.
Estas la tasko de la mastruma sistemo, Vindozo, Mac OSX, aŭ
Linukso, por administri ĉiu el tiuj apartaj procezoj, kiel la
programoj estas konata, kaj ŝanĝi inter ili por ke kiam vi
iri de kontrolanta vian Facebook paĝon por labori en via eseo
denove, Word estas kiu kuras.
>> Kelkfoje, tamen, ni volas programoj mem povi
fari multnombrajn aĵoj kiel ĉi tiu, tro.
Se vi estas kiel mi, vi probable havas aron da
malsamaj langetoj malfermi en via retumilo, unu por retpoŝto,
unu kun kalendaro, kaj tiel plu.
Ni povis trakti ĉiu langeto kiel aparta programo aŭ procezo,
kiel Google Chrome faras, sed multaj programoj uzi
fajrilo-pezo versio de procezo nomita fadeno.
>> A fadeno estas nur alia unueco de prilaborado, aro de
instrukcioj aŭ kodo kiu povas "kuri", citaĵo unquote,
samtempe kun aliaj fadenoj.
Ĉi tio estas kion ebligas vin foliumi Facebook
dum vi aŭskultas min en la fono aŭ havi du
YouTube videos ludi samtempe.
Do, ĉi tiu ĝenerala temo, konata kiel konkurenco, tipe
ne venas supren tiel frua en komputiko kursoj
ĉar la suba-nivelo detaloj postulos diskuto de
mastrumaj sistemoj kaj similaj.
Tamen, la lingvo de programado ni uzas en la
komencante de CS50, Scratch, havigas iujn nifty ilojn por
plifaciligi skribi programojn kun multnombraj aĵoj
okazas samtempe.
>> Kiam vi konstruos Scratch programoj, vi estas konstante
laborante kun fadenoj.
Ĉiu Scratch skripto, kiu estas kodo bloko kiu komencas kun
unu el la "kiam" puzlo pecoj, povas esti penso de
kiel aparta fadeno.
Ni rigardu simpla Scratch programo por vidi kiel tio funkcias.
>> Tie, ni havas fiŝon objekto aŭ sprite, kun du skriptoj
ke ambaŭ komenco kiam ni klaku la malgranda verda flago butonon.
La unua skribsistemo kontrolas la fiŝa movado.
Kiam la verdaj flago estas klakis, la fiŝo gets metis
sur la maldekstra flanko de la ekrano, nomita la scenejo,
alfrontas al dekstre.
Tiam, en aro de instrukcioj kiuj kuros eterne, ĝis ni
halti la programon, la fiŝo planas la dekstra flanko,
voltea, superas al la maldekstra flanko, kaj
voltea denove.
La dua skribsistemo kontrolas la fiŝa penso procezo.
Ĝi rezultas ke tiu estas malsata fiŝo.
Do post atendi dum 3 sekundoj, la fiŝo pensos,
"Mi estas malsata," por kvara dua.
Tiu skripto ankaux kuras ĉiam.
Kaj kiel ni vidas, de kuri la programon alklakante la
verda flago, ambaŭ skriptoj aperas ekzekuti
samtempe.
La fiŝo moviĝas kaj pensas al la sama tempo.
>> Ekde la kompatinda fiŝo aspektas tiel malsata, ni aldonu en iuj
cheesy spongo por gxi, por mangxi.
Espereble ili ne disfalas en la akvo.
Kiam ni aldonu en dua sprite, ni ankaŭ povos
aldoni en skriptoj responda al tiu sprite.
Kaj, sekve, ne estos alia aro de
fadenoj kiuj kuros.
Doni al la uzanto de nia programo kontrolon kiam la
malsata fiŝo ricevas manĝon, ni diras, ke ĉiufoje kiam la Spaco
Stango batis, cheesy spongo aperi sur la scenejo por la
fiŝoj por manĝi.
Antaŭ ol ni batis la Spaco Trinkejo, ni volas konservi la cheesy
spongo kaŝita por ke la fiŝoj ne povas vidi ilin.
Por tion fari, ni bezonos kelkajn skriptojn por la
cheesy spongo sprite.
La unua skribsistemo, la verda flago, estos nur kaŝi la nutraĵon.
Kontraŭe al la aliaj skriptoj ni skribis, ĉi tiu ne observu
kurante ĉiam.
Ĝi komencos kaj finos tre rapide, ĝuste kiam ni klaku
la verda flago butonon.
>> La sekva skripto ni havas fidas la Spaco Trinkejo esti
premis antaŭ ekzekuti.
Ni povas nomi atendanta uzanto enigo "atendante" aŭ "aŭskulti"
por evento.
Kaj la kodo kiu ekzekutas kiam evento estas ricevita aŭ
aŭdis nomas eventon uzado kodo.
Nia spaco Trinkejo eventa traktilo montros la cheesy spongo en
la ekrano tiel ke la fiŝoj povas manĝi ilin.
Je ĉi tiu punkto, ĉio looking good.
>> Post tio ni bezonas fari estas eltrovi kiel atingi
la fiŝo por realigi ke estas nutraĵo por manĝi.
Ni aldonas alian fadenon por la fisxoj, kiuj senĉese
ĉekojn ĉu ĝi estas tuŝi la cheesy spongo.
Ni faras tion en aparta fadeno ekde tiu vojo ni povas
senĉese kontroli por manĝo.
Alie, ni volas nur povos periode kontroli por manĝo
en inter glisado, turninte sin ĉirkaŭe, atendante, aŭ pensas.
>> OK.
Nun ni kuros nia Scratch programo.
Kiel atendita, la manĝo tuj kaŝas kaj la
malsata fiŝo naĝas tien kaj reen nur kiel antaŭe.
Kiam ni alvenis al la Spaco Trinkejo, la cheesy spongo venos en vido,
kaj la malsataj fiŝoj diras Whoo.
Sed atendu, jen stranga.
Kiel venas la fiŝoj de "Mi estas malsata" penso interrompas la
aliaj aferoj?
Tio estas ĉar ni ne establis neniun kunordigo
inter la tri fiŝoj skriptoj.
Ĉiu kuras en lia propra fadeno, fremda al kio la
aliaj faras.
Ni fiksas tiun antaŭ ol ni antaŭeniras.
>> Kunordigo inter fadenoj estas malfacila tasko ĉar ni
ne havas eksplicitan kontrolon kiam ĉiu fadeno kuras aŭ
ne kuras.
Sendi mesaĝon de unu fadeno al alia, ni bezonos
uzi variablo kiu povas agordi, aŭ skribu, en unu fadeno
kaj legu en la alia.
Ni krei variablon nomis foodFound ke ni povas fiksi por
vera kiam la fiŝo kolizias la cheesy spongo.
Nu, kompreneble, ni volas certigi, ke ni metu gxin al
Falsa komence.
Tiam, en la fiŝoj de pensado fadeno, ni kontrolu vidi se
la fiŝo trovis nutraĵon antaŭ montri la "mi malsatas"
pensis bobelo.
>> Nun, kurante la programo denove, ni vidas ke la fiŝoj
ne get interrompis kun pensoj de malsato, kiam la
cheesy spongo estas ekstere.
La fina problemo ni havas estas ke la cheesy spongo ne iros
forpasis post la fiŝoj, citi unquote, "manĝas" ilin.
El la fiŝoj skriptoj, ne estas facila maniero por kaŝi la cheesy
spongo, do ni bezonas sendi mesaĝon al la cheesy spongo
sprite kaŝi.
Ni povus fari tion kun alia variablo kiu la cheesy spongo
sprite havas aliron al, tiel kiel la fiŝoj sprite.
>> Tamen, estas pli pura maniero por fari tion en ĉi tiu kazo,
pro tio ke anstataŭ sendi mesaĝon al skripto jen
ie en la mezo de ekzekuti, ni povas sendi la
mesaĝon al skripto ke tio atendas por komenci.
Ni tion faras por havi la fiŝojn transdonita evento, unu ni
voki manĝata.
Tiam, ni krei skripton por la cheesy spongo ke volo
atendi ĉi evento.
Ĉi tio estas simila al la Spaca Trinkejo evento, krom ke tiu
tempo, la uzanto ne estas la unu rekte deĉenigi la evento.
Kaj cxio ni devas fari estas metis niajn foodFound variablo reen
al falsa, kaj ni povas nun doni la malsata fiŝo kiel multaj
servings de cheesy spongo kiel ĝi volas.
>> Do ne tro malbone, ĉu ne?
En C, skribante multi-threaded programoj estas pli komplika,
sed la fundamentoj estas la sama.
Ĉiuokaze, mi esperas vi havas grandan tempon konstruante amuziĝi
concurrente programoj en Scratch.
Mia nomo estas Nate Hardison.
Ĉi tiu estas CS50.