[Powered by Google Translate] НАТЕ Хардисон: Када имаш више програма отворити на
рачунар, изгледа као да је све
ради у исто време.
На пример, можда се ради у веб бровсер као
Фирефок или Интернет Екплорер, слушање музике на иТунес,
и писање есеја са Речи.
Међутим, испод хаубе, заправо програми
покренути један по један.
То је посао оперативног система Виндовс, Мац ОСКС или
Линук, да управљају сваки од ових одвојених процеса, као
програми су познати и пребацивање између њих, тако да када
иди из провере свој Фацебоок страницу да раде на свом есеју
опет, реч је онај који је покренут.
>> Понекад, међутим, желимо програме себе моћи
да уради више ствари овако, превише.
Ако сте попут мене, вероватно имате гомилу
различите картице отворите у вашем веб претраживачу, један за е-пошту,
једна са календаром, и тако даље.
Могли би третирати сваки таб као посебан програм или процес,
као Гоогле Цхроме ради, али многи програми користе
упаљач-тежина верзија процеса зове нит.
>> Нит је само још једна јединица обраде, скуп
упутства или код који се може "покренути", цитат, завршити цитат
истовремено са другим нитима.
То је оно што чини да можете да претражујете Фацебоок
док слушате мене у позадини, или да имају два
ИоуТубе играју у исто време.
Дакле, обично ова општа тема, познат као конкурентност,
не долази до тако рано курсеве информатике
јер нижег нивоа детаља захтевају дискусију
оперативни системи и слично.
Међутим, програмски језик који користимо на
почетак ЦС50, Огреби, даје неке Нифти алате за
лакше да пишу програме са вишеструким стварима
дешава одједном.
>> Када направите огребу програме, стално си
рад са нитима.
Сваки Огреби скрипта, која је код блок који почиње са
један од "када" слагалица комада, могу се посматрати
као посебна нит.
Хајде да погледамо једноставан Огреби програм да видим како то ради.
>> Ево, имамо рибе објекат, или Сприте, са две скрипте
да и почетак када смо кликните на малу зелено дугме заставу.
Први сценарио контролише кретање рибе.
Када зелена застава се кликне, риба добија постављене
на левој страни екрана, под називом сцену,
окренути на десно.
Затим, у сету инструкција које ће заувек воде, док не
заустави програм, риба клизи на десну страну,
окреће, враћа се на левој страни, а
окрене поново.
Други сценарио контролише мисли процес рибе.
Испоставило се да је то гладан риба.
Дакле, након чека 3 секунде, риба ће мислити,
"Ја сам гладан", по четврти секунде.
Ова скрипта се ради заувек.
И као што видимо, од покретања програма кликом на
зелена застава, обе скрипте изгледа да изврши
истовремено.
Риба се креће и мисли у исто време.
>> Од сиромашних риба изгледа тако гладан, хајде да додамо у неким
Ван пуфне за то да једем.
Надам се да неће распасти у води.
Када додамо у другој спрајт, такође ћемо моћи да
додај у скриптама које одговарају том спрајт.
И, дакле, неће бити још један сет
нити да ће покренути.
Да би се корисник нашег програма контроле над када
гладни риба добија храну, рецимо да кад год Спаце
Бар је ударио, Ван надима се појављују на сцени за
риба једе.
Пре него што је погодио размакницу, ми ћемо желети да задржи цхееси
пуфне скривени, тако да риба не може да их види.
Да бисте то урадили, треба нам пар скрипти за
Ван надима Сприте.
Први сценарио, зелена застава, ће само сакрити храну.
За разлику од других скрипти смо написали, ово неће задржати
ради заувек.
Она ће почети и завршити веома брзо, у праву када смо клик
зелена застава дугме.
>> Наредна скрипта смо чекати за Размакница да буде
притисне пре извршавања.
Можемо позвати чекамо корисничког уноса "на чекању" или "слушање"
за догађај.
А код који се извршава када се догађај прими или
Чуо се зове догађај руковање код.
Наш бар Простор догађај руковалац ће показати цхееси Пуффс на
екран, тако да риба може да их поједе.
У овом тренутку, све је изгледа добро.
>> Следеће што треба да урадите је да смислимо како да се
риба да схвати да има хране да једе.
Хајде да додамо још једну тему за рибе које стално
проверава да ли је или није то је додиривање цхееси Пуффс.
Ми ово радимо у посебној теми, јер тако можемо
стално проверавати за храну.
Иначе, ми смо само би могли да периодично проверава храну
између Глидинг, окреће, чекање, или размишљања.
>> ОК.
Сада хајде да наш програм Огреби.
Као што се очекивало, храна одмах крије и
гладни риба плива напред и назад као и до сада.
Када смо погодио Спаце Бар, Ван надима долазе у приказу
и гладни риба каже Вхоо.
Али чекајте, то је чудно.
Како доћи у риба "Гладан сам" мислио обустави
друга ствар?
То је зато што нисмо успоставити никакву координацију
између три рибе скрипти.
Сваки ради у сопственом тхреад, несвесни шта је
други раде.
Хајде да поправимо ово пре него што кренемо даље.
>> Координација између навоја је незгодан задатак, јер ми
немају експлицитну контролу над када свака нит ради или
не ради.
Да бисте послали поруку из једне нити на другу, требаће нам
да користи променљиву која можемо да поставимо, или пише, у једном тхреад
и прочитати у другом.
Хајде да креирамо променљиву зове фоодФоунд које можемо подесити да
Истина, када је риба у води Цхееси надима.
Па, наравно, желимо да се уверите да смо га поставили на
лаж почетку.
Затим, у размишљање тхреад рибе, ми ћемо проверити да ли
риба је пронашла храну пре приказивања "Ја сам гладан"
Мислио мехур.
>> Сада, покретање програма поново видимо да риба
не буде прекинута са мислима глади, када
Ван надима се напоље.
Коначна проблем који имамо је да значе Грин надима не иде
е после рибе, цитирам завршити цитат, "једе" их.
Од рибљих скрипти, нема једноставан начин да сакријете цхееси
пуфне, тако да морамо послати поруку да цхееси надима
спрајт да се сакрије.
Могли бисмо то урадили са другим променљиве да цхееси надима
спрајт има приступ, као и рибе Сприте.
>> Међутим, постоји чистији начин да се то уради у овом случају,
јер уместо слања поруке сценарију који је
негде у средини извршења, можемо послати
порука сценарију који је чекао да почне.
Ми то чинимо тако што рибу емитује догађај, један ћемо
позовите поједен.
Затим ћемо направити скрипту за цхееси надима се да ће
сачекајте за овај догађај.
Ово је слично догађају Спаце Бар, осим да је ово
време, корисник није један директно активира догађај.
Сада све што треба да урадите је да поставите наш фоодФоунд променљива назад
на лаж, и сада можемо дати гладног рибу као многи
порције Цхееси надима као што жели.
>> Зато није лоше, зар не?
У Ц, пише мулти-тхреадед програма је компликованији,
али основе су исти.
У сваком случају, надам се да имате велики пут градио мало забаве
истовремених програма у нуле.
Моје име је Нејт Хардисон.
Ово је ЦС50.