[Powered by Google Translate] Нейт HARDISON: Когато имаш няколко програми, отваряне на компютър, изглежда, че всичко е в същото време. Например, може да се работи в уеб браузър, като Firefox или Internet Explorer, слушане на музика на качи, и писане на есе с Word. Въпреки това, под капака, програмите всъщност изпълнявате едно в даден момент. Това е работа на операционната система, Windows, Mac OSX, или Linux, да управлявате всяка от тези отделни процеси, тъй като програми са известни, и да превключвате между тях, така че когато от проверка на вашата Facebook страница, за да работи върху есето си отново, Word е този, който работи. Понякога, обаче, ние искаме самите програми, за да могат да направи няколко неща по този начин, също. Ако сте като мен, вероятно имате куп различните раздели, отворени във вашия уеб браузър, за електронна поща, един с календар, и така нататък. Бихме могли да се отнасяме към всеки раздел като отделна програма или процес, като Google Chrome, но много програми използват по-леки версия на един процес, наречен конец. Конец е просто още една единица за обработка, набор от инструкции или код, който може да "тече", цитирам цитата, едновременно с други теми. Това е, което го прави възможно, за да разглеждате Facebook докато ме слушате във фонов режим или да има две YouTube видеоклипове, които играят по едно и също време. Така че, тази обща тема, известен като едновременност, обикновено не идва толкова рано в курсове по компютърни науки , тъй като на по-ниско ниво детайли изискват обсъждане на операционни системи и други подобни. Въпреки това, език за програмиране, който използват в началото на CS50, Scratch, предвижда някои готин инструменти за да го направи по-лесно да се пишат програми с няколко неща става наведнъж. Когато създавате Scratch програми, вие сте постоянно работа с конци. Всеки Scratch скрипт, който е код блок, който започва с един на "кога" парчета от пъзел, може да се мисли като отделна нишка. Нека разгледаме една проста програма, Scratch, за да видите как работи това. Ето, ние имаме риба обект, или спрайт, с две азбуки , че както начало, когато щракнете върху зеления бутон на флага. Първата версия на сценария контролира движението на рибата. Когато се кликне върху зеленото знаме, риба получава поставя от лявата страна на екрана, наречен етап, обърната надясно. След това, в набор от инструкции, че ще работи вечно, докато ние спрете програмата, рибата се плъзга към дясната страна, обръща се връща към лявата страна, и се обръща отново. Вторият сценарий контролира мисловния процес на рибата. Оказва се, че това е гладна риба. Така че, след изчакване в продължение на 3 секунди, рибата ще си помислят, "Гладен съм" за 1/4 секунда. Този скрипт също работи завинаги. И както виждаме, от изпълнението на програмата, като щракнете върху зелен флаг, и двете скриптове за изпълнение едновременно. Рибата се движи и мисли в същото време. Тъй като бедните риба изглежда толкова гладен, нека добавим в някои сирене кълба, за да се хранят. Надяваме се, че няма да се разпадне във водата. Когато добавим в секунда спрайт, ние също така ще бъде в състояние да Добави в скриптове, съответстващи на този спрайт. И по този начин, ще има друг набор от нишки, които ще работят. Да дава на потребителя на нашата програма за контрол над гладни риба получи храна, нека кажем, че всеки път, когато Space Бар е хит, сирене кълба се появяват на сцената за риба за ядене. Преди да удари Space Bar, ние ще искате да запазите на сирене кълба скрити, така че рибата не може да ги види. За да направите това, ще имаме нужда от няколко скриптове за сирене кълба дух. Първата версия на сценария, зелен флаг, просто ще се скрие на храната. За разлика от други скриптове, които съм писал, това няма да задържи работи завинаги. Той ще започне и да завърши много бързо, точно когато кликнете зеления бутон флаг. Следващия скрипт, което имаме, ще изчака бар пространство, за да бъде натиснат преди да изпълни. Можем да наречем чака за приноса на потребителите "чакане" или "слушане" за дадено събитие. И кода, който се изпълнява, когато дадено събитие е получено или чу се нарича код събитие работа. Нашето пространство манипулатора на събитие Бар ще покаже сирене кълба на екрана, така че рибата да ги яде. В този момент, всичко изглежда добре. Следващото нещо, което трябва да направите, е да разбера как да се получи рибата, за да осъзнае, че има храна за ядене. Нека добавим друга тема за рибите, които постоянно проверки дали не се докосват сирене кълба. Ние правим това в отделна нишка, тъй като по този начин можем постоянно проверява за храна. В противен случай, ние само ще бъде в състояние да проверява периодично за храна между плъзгане, обръщайки се, чака, или да мисля. OK. Сега нека да стартирате нашата програма Scratch. Както се очакваше, храна непосредствено крие и гладни риба плува напред-назад, както преди. Когато удари Space Bar, сирене кълба влизат в изглед, и гладните риби казва кукумявка. Но чакайте, това е странно. Защо рибата "Гладен съм" мисловни прекъсва други неща? Това е така, защото ние не създава никакви координация между три рибни скриптове. Всеки работещ в собствената си нишка, забравил за това, което другите правят. Да се ​​определи това, преди да продължим. Координация между нишки е трудна задача, тъй като ние не са изрично контрол над това, когато всяка нишка работи или не работи. За да изпратите съобщение от една нишка към друга, ще имаме нужда от да се използва променлива, която можем да поставим, или да напише в една нишка и прочетете в другата. Нека създадем променлива наречена foodFound, че можем да настроите да вярно, когато рибата се влива в сирене кълба. Е, разбира се, искаме да сме сигурни, че можем да го настроите да фалшиви първоначално. След това, в мисленето нишки на рибата, ние ще проверим, за да видите, ако рибата е храна преди да се покаже "Гладен съм" , че балон. Сега, да стартирате програмата отново, ние виждаме, че рибата не се прекъсва с мисли на глад, когато сирене кълба. Последният проблем, който имаме е, че сирене кълба, които не са се далеч след риба, цитирам цитата, "изяжда". От рибата скриптове, няма лесен начин да се скрие на сирене пориви, така че ние трябва да изпратите съобщение на сирене кълба Спрайт да се скрие. Бихме могли да направим това с друга променлива, че сирене кълба Спрайт има достъп, както и спрайт риба. Въпреки това, има по-чист начин да направите това в този случай, тъй като вместо изпращане на съобщение до скрипт, който е някъде в средата на изпълнение, ние можем да изпратим на съобщение на скрипт, който чака да започне. Ние правим това, като рибата излъчване на дадено събитие, ние ще обадете яде. След това ние ще създадем скрипт за сирене кълба, които ще изчакайте за това събитие. Това е подобно на събитието Space Bar, с изключение на това, че този време, потребителят не е пряко задействане на събитието. Сега всичко, което трябва да направите, е да зададете нашата foodFound гърба променлива неверни, и сега можем да даде на гладния риба, тъй като много порции сирене кълба, тъй като иска. Така че не е толкова лошо, нали? В C, писане на многонишковите програми е по-сложно, но основите са едни и същи. Както и да е, надявам се, че има много време, изграждане на някои забавно програми едновременно в Scratch. Моето име е Нейт Hardison. Това е CS50.