1 00:00:07,360 --> 00:00:09,360 [Powered by Google Translate] Nate HARDISON: Кога имаш повеќе програми отворите на 2 00:00:09,360 --> 00:00:11,250 компјутер, ми се чини дека сè е 3 00:00:11,250 --> 00:00:12,880 работи во исто време. 4 00:00:12,880 --> 00:00:15,350 На пример, може да се работат во веб прелистувач како 5 00:00:15,350 --> 00:00:19,360 Firefox или Internet Explorer, слушање музика на iTunes, 6 00:00:19,360 --> 00:00:21,490 и пишување есеј со Word. 7 00:00:21,490 --> 00:00:24,240 Сепак, под хауба, програмите всушност 8 00:00:24,240 --> 00:00:25,830 работи едно по едно време. 9 00:00:25,830 --> 00:00:29,750 Тоа е работа на оперативниот систем, Microsoft Windows, Mac OSX или 10 00:00:29,750 --> 00:00:33,070 Linux, да управуваат со секоја од овие одделни процеси, како 11 00:00:33,070 --> 00:00:35,900 програми се познати, и да се префрлате помеѓу нив, така што кога ќе 12 00:00:35,900 --> 00:00:38,610 одат од проверка на вашата Фејсбук страница за да работат на вашиот есеј 13 00:00:38,610 --> 00:00:41,590 повторно, Word е оној кој е трчање. 14 00:00:41,590 --> 00:00:44,890 >> Понекогаш, сепак, сакаме самите програми да бидат во можност 15 00:00:44,890 --> 00:00:47,440 да направите повеќе работи како оваа, исто така. 16 00:00:47,440 --> 00:00:49,630 Ако сте како мене, веројатно имаат еден куп на 17 00:00:49,630 --> 00:00:52,730 различни јазичиња отвори во вашиот веб прелистувач, еден за електронска пошта, 18 00:00:52,730 --> 00:00:55,070 еден со календарот, и така натаму. 19 00:00:55,070 --> 00:00:58,270 Ние би можеле да се однесуваат едни кон табот како посебна програма или процес, 20 00:00:58,270 --> 00:01:01,300 како Гугл Хром не, но многу програми користите 21 00:01:01,300 --> 00:01:04,430 полесни тежина верзија на процес наречен конец. 22 00:01:04,430 --> 00:01:07,190 >> А темата е само уште една единица за обработка, збир на 23 00:01:07,190 --> 00:01:10,100 инструкции или код кој може да "работи", цитирам unquote, 24 00:01:10,100 --> 00:01:12,560 истовремено со други теми. 25 00:01:12,560 --> 00:01:15,150 Тоа е она што го прави возможно за да ја разгледате Фејсбук 26 00:01:15,150 --> 00:01:17,940 додека го слушате за мене во позадина или да има две 27 00:01:17,940 --> 00:01:20,790 YouTube видео игра во исто време. 28 00:01:20,790 --> 00:01:24,660 Значи, оваа општа тема, познат како Concurrency, обично 29 00:01:24,660 --> 00:01:26,930 не излезе толку рано во компјутерски науки курсеви 30 00:01:26,930 --> 00:01:29,790 затоа што пониско ниво детали бараат дискусија 31 00:01:29,790 --> 00:01:31,930 оперативни системи и слично. 32 00:01:31,930 --> 00:01:34,170 Сепак, програмски јазик се користи во 33 00:01:34,170 --> 00:01:38,000 почетокот на CS50, гребење, обезбедува некои Вешта алатки за 34 00:01:38,000 --> 00:01:40,390 да може полесно да пишуваат програми со повеќе работи 35 00:01:40,390 --> 00:01:42,390 случува одеднаш. 36 00:01:42,390 --> 00:01:45,050 >> Кога ќе се изгради гребење програми, ти си постојано 37 00:01:45,050 --> 00:01:46,760 работи со теми. 38 00:01:46,760 --> 00:01:49,770 Секоја гребење скрипта, кој е кодот блок што започнува со 39 00:01:49,770 --> 00:01:52,600 еден од "кога" мозаик парчиња, може да се смета за 40 00:01:52,600 --> 00:01:54,380 како посебна нишка. 41 00:01:54,380 --> 00:01:58,040 Ајде да погледнеме во едноставен гребење програма да се види како тоа функционира. 42 00:01:58,040 --> 00:02:01,730 >> Еве, ние имаме риба објект, или самовила, со две сценарија 43 00:02:01,730 --> 00:02:05,000 дека и двете почеток кога ќе кликнете на мало зелено знаме копче. 44 00:02:05,000 --> 00:02:07,290 Првиот скрипта контролира движењето на рибата. 45 00:02:07,290 --> 00:02:09,850 Кога зелено знаме е кликнато, риба добива ставен 46 00:02:09,850 --> 00:02:12,450 на левата страна на екранот, наречен фаза, 47 00:02:12,450 --> 00:02:14,090 со кои се соочува десно. 48 00:02:14,090 --> 00:02:17,070 Потоа, во еден сет од инструкции, кои ќе работи засекогаш, додека ние 49 00:02:17,070 --> 00:02:20,270 запре програмата, риба лета на десната страна, 50 00:02:20,270 --> 00:02:22,900 се врти, се навраќа на левата страна, и 51 00:02:22,900 --> 00:02:24,470 врти повторно. 52 00:02:24,470 --> 00:02:27,410 Втората скрипта контролира мисла процес на рибата. 53 00:02:27,410 --> 00:02:29,290 Излезе дека ова е гладен риба. 54 00:02:29,290 --> 00:02:32,080 Па по чекање за 3 секунди, рибата ќе мислам, 55 00:02:32,080 --> 00:02:34,420 "Јас сум гладен" за четвртиот секунда. 56 00:02:34,420 --> 00:02:36,440 Оваа скрипта исто така, работи засекогаш. 57 00:02:36,440 --> 00:02:38,940 И како што гледаме, од водење на програма со кликнување на 58 00:02:38,940 --> 00:02:41,730 зелено знаме, и скрипти се појави да се изврши 59 00:02:41,730 --> 00:02:43,100 истовремено. 60 00:02:43,100 --> 00:02:46,460 Рибата се движи и мисли во исто време. 61 00:02:46,460 --> 00:02:49,030 >> Од сиромашните риба изгледа толку гладни, да додадете во некои 62 00:02:49,030 --> 00:02:50,670 вулгарен puffs за да јадат. 63 00:02:50,670 --> 00:02:53,060 Се надевам дека тие не ќе се распадне во водата. 64 00:02:53,060 --> 00:02:55,560 Кога ќе се додаде во вториот самовила, ние исто така ќе бидат во можност да 65 00:02:55,560 --> 00:02:58,020 додадете во скрипти одговара дека самовила. 66 00:02:58,020 --> 00:02:59,580 И, оттука, ќе има уште еден сет на 67 00:02:59,580 --> 00:03:00,830 теми кои ќе се кандидира. 68 00:03:03,590 --> 00:03:06,270 Да се ​​даде на корисник на нашата програма контрола врз кога 69 00:03:06,270 --> 00:03:09,340 гладни риби добива храна, да речеме дека секогаш кога простор 70 00:03:09,340 --> 00:03:11,840 Бар е хит, вулгарен puffs се појави на сцената за 71 00:03:11,840 --> 00:03:13,300 риба за јадење. 72 00:03:13,300 --> 00:03:15,760 Пред да се погоди Празно место, ќе сакате да го задржите вулгарен 73 00:03:15,760 --> 00:03:19,020 puffs скриени, така што рибата не може да ги види. 74 00:03:19,020 --> 00:03:21,140 Да го направите ова, ние ќе треба неколку сценарија за 75 00:03:21,140 --> 00:03:22,750 вулгарен puffs самовила. 76 00:03:22,750 --> 00:03:26,980 Првиот скрипта, зелено знаме, само ќе ги кријат храна. 77 00:03:26,980 --> 00:03:29,530 За разлика од други сценарија ние сум напишал, ова не ќе го задржи 78 00:03:29,530 --> 00:03:30,560 работи засекогаш. 79 00:03:30,560 --> 00:03:33,250 Таа ќе почне и ќе заврши многу брзо, во право кога ќе кликнете 80 00:03:33,250 --> 00:03:35,000 зелено знаме копче. 81 00:03:35,000 --> 00:03:37,180 >> Следниот скрипта имаме ќе чека на просторот бар да биде 82 00:03:37,180 --> 00:03:39,590 притиснат пред извршување. 83 00:03:39,590 --> 00:03:42,770 Можеме да го наречеме чекање за корисникот влез "чекање" или "слушање" 84 00:03:42,770 --> 00:03:43,860 за настанот. 85 00:03:43,860 --> 00:03:46,750 И кодот кој извршува кога еден настан се добиени или 86 00:03:46,750 --> 00:03:50,280 слушнале се нарекува настан ракување код. 87 00:03:50,280 --> 00:03:53,550 Нашите растојание настан управувачот ќе се покаже на вулгарен puffs на 88 00:03:53,550 --> 00:03:56,330 на екранот, така што риби да ги јадат. 89 00:03:56,330 --> 00:03:58,880 Во овој момент, сè е во потрага добро. 90 00:03:58,880 --> 00:04:00,990 >> Следното нешто што треба да направите е да дознаам како да се добие 91 00:04:00,990 --> 00:04:03,570 рибите да сфатат дека има што да јадам. 92 00:04:03,570 --> 00:04:06,030 Ајде да додадете уште една нишка на риби кои постојано 93 00:04:06,030 --> 00:04:08,790 проверува дали е или не е допирање на вулгарен puffs. 94 00:04:08,790 --> 00:04:11,510 Ние го правиме ова во посебна нишка, бидејќи на тој начин можеме да 95 00:04:11,510 --> 00:04:13,710 постојано се провери за храна. 96 00:04:13,710 --> 00:04:16,829 Инаку, ние само ќе бидат во можност да периодично да проверува за храна 97 00:04:16,829 --> 00:04:21,180 помеѓу плови, вртејќи се околу, чекајќи, или размислување. 98 00:04:21,180 --> 00:04:22,000 >> ОК. 99 00:04:22,000 --> 00:04:23,785 Сега ајде да се кандидира на нашите гребење програма. 100 00:04:23,785 --> 00:04:26,921 Како што се очекуваше, храната веднаш се крие и 101 00:04:26,921 --> 00:04:28,920 гладни риби плива и назад, исто како порано. 102 00:04:32,050 --> 00:04:35,060 Кога ќе се погоди простор бар, вулгарен puffs дојде во погледот, 103 00:04:35,060 --> 00:04:37,470 и гладни риби вели Whoo. 104 00:04:37,470 --> 00:04:39,340 Но чекајте, тоа е чудно. 105 00:04:39,340 --> 00:04:42,150 Како дојде на рибата "Јас сум гладен" мисла прекинува 106 00:04:42,150 --> 00:04:43,580 други нешта? 107 00:04:43,580 --> 00:04:45,780 Тоа е затоа што не воспостави некаква координација 108 00:04:45,780 --> 00:04:47,590 меѓу трите риба скрипти. 109 00:04:47,590 --> 00:04:50,610 Секој работи во сопствена нишка, несвесни за она што 110 00:04:50,610 --> 00:04:52,120 другите го прават. 111 00:04:52,120 --> 00:04:54,980 Да го надминете овој, пред да продолжат понатаму. 112 00:04:54,980 --> 00:04:57,700 >> Координација помеѓу теми е слабо задача, бидејќи ние 113 00:04:57,700 --> 00:05:00,940 немаат експлицитна контрола врз кога секоја тема работи или 114 00:05:00,940 --> 00:05:02,190 не работи. 115 00:05:02,190 --> 00:05:04,710 За да испратите порака од една нишка на друг, ќе треба 116 00:05:04,710 --> 00:05:08,300 да се користи променлива дека ние може да се постави, или да пишуваат, во една нишка 117 00:05:08,300 --> 00:05:10,170 и читање во другата. 118 00:05:10,170 --> 00:05:12,920 Да се ​​создаде променлива наречена foodFound дека ние може да се постави на 119 00:05:12,920 --> 00:05:15,530 точно кога рибата бега во вулгарен puffs. 120 00:05:15,530 --> 00:05:17,540 Па, се разбира, ние сакаме да се осигураме дека можеме да го постави за 121 00:05:17,540 --> 00:05:19,240 false почетокот. 122 00:05:19,240 --> 00:05:22,540 Потоа, во размислување тема на риба, ние ќе се провери да се види дали 123 00:05:22,540 --> 00:05:25,400 риба најде храна пред прикажување на "Јас сум гладен" 124 00:05:25,400 --> 00:05:26,770 мисла меур. 125 00:05:26,770 --> 00:05:29,670 >> Сега, водење на програма, повторно, можеме да видиме дека рибите 126 00:05:29,670 --> 00:05:31,580 не се прекинува со мисли од глад кога 127 00:05:31,580 --> 00:05:33,820 вулгарен puffs се надвор. 128 00:05:33,820 --> 00:05:36,820 Конечниот проблем имаме е дека вулгарен puffs не одат 129 00:05:36,820 --> 00:05:39,800 далеку по риба, цитирам unquote, "јаде" нив. 130 00:05:39,800 --> 00:05:42,305 Од риба скрипти, нема лесен начин за да се скрие вулгарен 131 00:05:42,305 --> 00:05:44,710 puffs, па ние треба да се испрати порака до вулгарен puffs 132 00:05:44,710 --> 00:05:46,780 самовила да се сокрие. 133 00:05:46,780 --> 00:05:49,550 Ние би можеле да го направите ова со друга променлива која вулгарен puffs 134 00:05:49,550 --> 00:05:52,680 самовила има пристап до, како и риба самовила. 135 00:05:52,680 --> 00:05:55,720 >> Сепак, таму е почиста начин да го направите ова во овој случај, 136 00:05:55,720 --> 00:05:57,840 бидејќи наместо испраќање на порака до скрипта, кој е 137 00:05:57,840 --> 00:06:00,570 некаде во средината на извршување, може да се испрати 138 00:06:00,570 --> 00:06:03,710 порака на скрипта која чека да започне. 139 00:06:03,710 --> 00:06:07,360 Ние го правиме ова со тоа што на риба емитува настан, еден ние ќе 140 00:06:07,360 --> 00:06:08,800 јавете се јаде. 141 00:06:08,800 --> 00:06:11,510 Потоа, ќе се создаде скрипта за вулгарен puffs кои ќе 142 00:06:11,510 --> 00:06:13,030 чекаат за овој настан. 143 00:06:13,030 --> 00:06:15,560 Ова е слично на просторот бар настан, освен дека овој 144 00:06:15,560 --> 00:06:19,250 време, корисникот не е оној директно активира на настанот. 145 00:06:19,250 --> 00:06:22,800 Сега сите ние треба да направите е да поставите нашите foodFound променлива назад 146 00:06:22,800 --> 00:06:25,750 на false, а ние сега може да се даде на гладни риби како многу 147 00:06:25,750 --> 00:06:28,470 порции на вулгарен puffs како што сака. 148 00:06:28,470 --> 00:06:30,040 >> Значи не е премногу лошо, нели? 149 00:06:30,040 --> 00:06:33,400 Во C, пишување мулти-навој програми е посложена, 150 00:06:33,400 --> 00:06:35,700 но основите се исти. 151 00:06:35,700 --> 00:06:38,690 Како и да е, се надевам дека имаат многу време градење на некоја забава 152 00:06:38,690 --> 00:06:41,030 истовремени програми во нула. 153 00:06:41,030 --> 00:06:42,570 Моето име е Нејт Hardison. 154 00:06:42,570 --> 00:06:45,260 Ова е CS50.