1 00:00:07,360 --> 00:00:09,360 [Powered by Google Translate] NATE hardison: Khi bạn đã có nhiều chương trình mở trên một 2 00:00:09,360 --> 00:00:11,250 máy tính, nó có vẻ như tất cả mọi thứ 3 00:00:11,250 --> 00:00:12,880 chạy cùng một lúc. 4 00:00:12,880 --> 00:00:15,350 Ví dụ, bạn có thể được làm việc trong một trình duyệt web như 5 00:00:15,350 --> 00:00:19,360 Firefox hoặc Internet Explorer, nghe nhạc trên iTunes, 6 00:00:19,360 --> 00:00:21,490 và viết một bài luận với Word. 7 00:00:21,490 --> 00:00:24,240 Tuy nhiên, dưới mui xe, các chương trình thực sự 8 00:00:24,240 --> 00:00:25,830 chạy một tại một thời điểm. 9 00:00:25,830 --> 00:00:29,750 Đó là công việc của hệ điều hành, Windows, Mac OSX, hoặc 10 00:00:29,750 --> 00:00:33,070 Linux, để quản lý các quy trình riêng biệt, như là 11 00:00:33,070 --> 00:00:35,900 chương trình này được biết đến, và chuyển đổi giữa chúng để khi bạn 12 00:00:35,900 --> 00:00:38,610 đi kiểm tra trang Facebook của bạn để làm việc trên bài luận của bạn 13 00:00:38,610 --> 00:00:41,590 một lần nữa, Word là một trong đó là chạy. 14 00:00:41,590 --> 00:00:44,890 >> Đôi khi, mặc dù, chúng tôi muốn chương trình tự để có thể 15 00:00:44,890 --> 00:00:47,440 làm nhiều điều như thế này, quá. 16 00:00:47,440 --> 00:00:49,630 Nếu bạn đang như tôi, bạn có thể có một loạt các 17 00:00:49,630 --> 00:00:52,730 các tab khác nhau mở ra trong trình duyệt web của bạn, một cho email, 18 00:00:52,730 --> 00:00:55,070 một với lịch, và như vậy. 19 00:00:55,070 --> 00:00:58,270 Chúng ta có thể đối xử với mỗi tab là một chương trình riêng biệt hoặc những quá trình, 20 00:00:58,270 --> 00:01:01,300 như Google Chrome không có gì, nhưng nhiều chương trình sử dụng một 21 00:01:01,300 --> 00:01:04,430 phiên bản trọng lượng nhẹ của một quá trình được gọi là một sợi. 22 00:01:04,430 --> 00:01:07,190 >> Một sợi chỉ là một đơn vị chế biến, một bộ 23 00:01:07,190 --> 00:01:10,100 hướng dẫn hoặc mã có thể "chạy", quote unquote, 24 00:01:10,100 --> 00:01:12,560 đồng thời với các chủ đề khác. 25 00:01:12,560 --> 00:01:15,150 Đây là những gì làm cho nó có thể cho bạn để duyệt Facebook 26 00:01:15,150 --> 00:01:17,940 trong khi nghe tôi trong nền hoặc có hai 27 00:01:17,940 --> 00:01:20,790 Video YouTube đang chơi cùng một lúc. 28 00:01:20,790 --> 00:01:24,660 Vì vậy, chủ đề chung này, được gọi là đồng thời, thường 29 00:01:24,660 --> 00:01:26,930 không đi lên ngay từ đầu khóa học khoa học máy tính 30 00:01:26,930 --> 00:01:29,790 bởi vì các chi tiết cấp thấp hơn yêu cầu thảo luận 31 00:01:29,790 --> 00:01:31,930 hệ điều hành và các loại tương tự. 32 00:01:31,930 --> 00:01:34,170 Tuy nhiên, các ngôn ngữ lập trình, chúng tôi sử dụng tại 33 00:01:34,170 --> 00:01:38,000 đầu CS50, Scratch, cung cấp một số công cụ tiện lợi để 34 00:01:38,000 --> 00:01:40,390 làm cho nó dễ dàng hơn để viết các chương trình với nhiều điều 35 00:01:40,390 --> 00:01:42,390 xảy ra cùng một lúc. 36 00:01:42,390 --> 00:01:45,050 >> Khi bạn xây dựng các chương trình Scratch, bạn liên tục 37 00:01:45,050 --> 00:01:46,760 làm việc với các chủ đề. 38 00:01:46,760 --> 00:01:49,770 Mỗi kịch bản Scratch, mà là một khối mã bắt đầu với 39 00:01:49,770 --> 00:01:52,600 một trong những "khi" mảnh ghép, có thể được coi 40 00:01:52,600 --> 00:01:54,380 như là một chủ đề riêng biệt. 41 00:01:54,380 --> 00:01:58,040 Hãy xem xét một chương trình Scratch đơn giản để xem cách làm việc này. 42 00:01:58,040 --> 00:02:01,730 >> Ở đây, chúng tôi đã có một đối tượng cá, hoặc sprite, với hai kịch bản 43 00:02:01,730 --> 00:02:05,000 rằng cả hai bắt đầu khi chúng ta nhấn vào nút lá cờ nhỏ màu xanh lá cây. 44 00:02:05,000 --> 00:02:07,290 Các kịch bản đầu tiên kiểm soát chuyển động của cá. 45 00:02:07,290 --> 00:02:09,850 Khi lá cờ màu xanh lá cây được nhấp, cá bị đặt 46 00:02:09,850 --> 00:02:12,450 ở phía bên trái của màn hình, được gọi là sân khấu, 47 00:02:12,450 --> 00:02:14,090 phải đối mặt với bên phải. 48 00:02:14,090 --> 00:02:17,070 Sau đó, trong một tập hợp các hướng dẫn sẽ chạy mãi mãi, cho đến khi chúng tôi 49 00:02:17,070 --> 00:02:20,270 dừng chương trình, cá lướt nhẹ về phía bên phải, 50 00:02:20,270 --> 00:02:22,900 quay lại, quay ngược lại về phía bên trái, và 51 00:02:22,900 --> 00:02:24,470 quay lại một lần nữa. 52 00:02:24,470 --> 00:02:27,410 Kịch bản thứ hai điều khiển quá trình suy nghĩ của cá. 53 00:02:27,410 --> 00:02:29,290 Nó chỉ ra rằng đây là một con cá đói. 54 00:02:29,290 --> 00:02:32,080 Vì vậy, sau khi chờ đợi 3 giây, con cá sẽ nghĩ, 55 00:02:32,080 --> 00:02:34,420 "Tôi đói", cho một thứ hai thứ tư. 56 00:02:34,420 --> 00:02:36,440 Kịch bản này cũng chạy mãi mãi. 57 00:02:36,440 --> 00:02:38,940 Và như chúng ta thấy, từ chạy chương trình bằng cách nhấn vào 58 00:02:38,940 --> 00:02:41,730 màu xanh lá cây cờ, cả hai tập tin xuất hiện để thực hiện 59 00:02:41,730 --> 00:02:43,100 cùng một lúc. 60 00:02:43,100 --> 00:02:46,460 Cá di chuyển và nghĩ rằng cùng một lúc. 61 00:02:46,460 --> 00:02:49,030 >> Kể từ khi cá nghèo trông đói quá, chúng ta hãy thêm vào một số 62 00:02:49,030 --> 00:02:50,670 cheesy nhát cho nó ăn. 63 00:02:50,670 --> 00:02:53,060 Hy vọng rằng họ sẽ không tan rã trong nước. 64 00:02:53,060 --> 00:02:55,560 Khi chúng ta thêm vào một ma thứ hai, chúng tôi cũng sẽ có thể 65 00:02:55,560 --> 00:02:58,020 thêm vào trong kịch bản tương ứng với ma đó. 66 00:02:58,020 --> 00:02:59,580 Và, do đó, có sẽ là một tập hợp các 67 00:02:59,580 --> 00:03:00,830 chủ đề sẽ chạy. 68 00:03:03,590 --> 00:03:06,270 Để cung cấp cho người sử dụng của chương trình kiểm soát của chúng tôi hơn khi 69 00:03:06,270 --> 00:03:09,340 đói cá được thực phẩm, chúng ta hãy nói rằng bất cứ khi nào không gian 70 00:03:09,340 --> 00:03:11,840 Bar là hit, nhát cheesy xuất hiện trên sân khấu. 71 00:03:11,840 --> 00:03:13,300 cá để ăn. 72 00:03:13,300 --> 00:03:15,760 Trước khi chúng tôi nhấn thanh Space, chúng tôi sẽ muốn giữ cheesy 73 00:03:15,760 --> 00:03:19,020 nhát ẩn để cá không thể nhìn thấy chúng. 74 00:03:19,020 --> 00:03:21,140 Để làm điều này, chúng tôi sẽ cần một vài kịch bản cho 75 00:03:21,140 --> 00:03:22,750 cheesy nhát ma. 76 00:03:22,750 --> 00:03:26,980 Các kịch bản đầu tiên, lá cờ màu xanh lá cây, sẽ giấu thức ăn. 77 00:03:26,980 --> 00:03:29,530 Không giống như các kịch bản khác mà chúng tôi đã viết, một trong những điều này sẽ không giữ 78 00:03:29,530 --> 00:03:30,560 chạy mãi mãi. 79 00:03:30,560 --> 00:03:33,250 Nó sẽ bắt đầu và kết thúc rất nhanh chóng, ngay khi chúng ta click 80 00:03:33,250 --> 00:03:35,000 nút lá cờ màu xanh lá cây. 81 00:03:35,000 --> 00:03:37,180 >> Các kịch bản tiếp theo chúng ta sẽ chờ đợi cho thanh Space để 82 00:03:37,180 --> 00:03:39,590 ép trước khi thực hiện. 83 00:03:39,590 --> 00:03:42,770 Chúng ta có thể chờ cuộc gọi cho người sử dụng đầu vào "chờ đợi" hay "lắng nghe" 84 00:03:42,770 --> 00:03:43,860 cho một sự kiện. 85 00:03:43,860 --> 00:03:46,750 Và mã để thực thi khi một sự kiện được nhận hoặc 86 00:03:46,750 --> 00:03:50,280 nghe được gọi là mã xử lý sự kiện. 87 00:03:50,280 --> 00:03:53,550 Space Bar xử lý sự kiện của chúng tôi sẽ hiển thị các nhát cheesy trên 88 00:03:53,550 --> 00:03:56,330 màn hình để cá có thể ăn chúng. 89 00:03:56,330 --> 00:03:58,880 Tại thời điểm này, mọi thứ đều tốt. 90 00:03:58,880 --> 00:04:00,990 >> Điều tiếp theo chúng ta cần làm là tìm hiểu làm thế nào để có được 91 00:04:00,990 --> 00:04:03,570 cá để nhận ra rằng có thực phẩm để ăn. 92 00:04:03,570 --> 00:04:06,030 Hãy thêm một thread để cá liên tục 93 00:04:06,030 --> 00:04:08,790 kiểm tra có hay không nó chạm vào nhát cheesy. 94 00:04:08,790 --> 00:04:11,510 Chúng tôi làm điều này trong một thread riêng biệt vì đó là cách chúng ta có thể 95 00:04:11,510 --> 00:04:13,710 liên tục kiểm tra cho thực phẩm. 96 00:04:13,710 --> 00:04:16,829 Nếu không, chúng tôi chỉ muốn có thể kiểm tra định kỳ đối với thực phẩm 97 00:04:16,829 --> 00:04:21,180 giữa trượt, quay lại, chờ đợi, hoặc suy nghĩ. 98 00:04:21,180 --> 00:04:22,000 >> OK. 99 00:04:22,000 --> 00:04:23,785 Bây giờ hãy chạy chương trình Scratch của chúng tôi. 100 00:04:23,785 --> 00:04:26,921 Theo dự kiến, các thực phẩm ngay lập tức ẩn và 101 00:04:26,921 --> 00:04:28,920 đói cá bơi qua lại giống như trước đây. 102 00:04:32,050 --> 00:04:35,060 Khi chúng ta nhấn thanh Space, nhát cheesy đi vào xem, 103 00:04:35,060 --> 00:04:37,470 và cá đói nói whoo. 104 00:04:37,470 --> 00:04:39,340 Nhưng chờ đợi, đó là lạ. 105 00:04:39,340 --> 00:04:42,150 Làm thế nào đến cá "Tôi đói" làm gián đoạn suy nghĩ 106 00:04:42,150 --> 00:04:43,580 các công cụ khác? 107 00:04:43,580 --> 00:04:45,780 Điều này là bởi vì chúng tôi đã không thiết lập bất kỳ phối hợp 108 00:04:45,780 --> 00:04:47,590 giữa ba kịch bản cá. 109 00:04:47,590 --> 00:04:50,610 Mỗi đang chạy trong thread riêng của mình, quên những gì các 110 00:04:50,610 --> 00:04:52,120 người khác đang làm. 111 00:04:52,120 --> 00:04:54,980 Hãy để sửa lỗi này trước khi chúng tôi di chuyển trên. 112 00:04:54,980 --> 00:04:57,700 >> Phối hợp giữa các chủ đề là một nhiệm vụ khó khăn vì chúng ta 113 00:04:57,700 --> 00:05:00,940 không có kiểm soát rõ ràng hơn khi mỗi thread chạy hoặc 114 00:05:00,940 --> 00:05:02,190 không chạy. 115 00:05:02,190 --> 00:05:04,710 Để gửi một tin nhắn từ một trong những chủ đề khác, chúng tôi sẽ cần 116 00:05:04,710 --> 00:05:08,300 sử dụng một biến mà chúng ta có thể thiết lập, hoặc viết, trong một thread 117 00:05:08,300 --> 00:05:10,170 và đọc trong khác. 118 00:05:10,170 --> 00:05:12,920 Hãy tạo ra một foodFound gọi là biến mà chúng ta có thể thiết lập để 119 00:05:12,920 --> 00:05:15,530 đúng khi cá chạy vào nhát cheesy. 120 00:05:15,530 --> 00:05:17,540 Vâng, tất nhiên, chúng tôi muốn đảm bảo rằng chúng tôi đặt nó vào 121 00:05:17,540 --> 00:05:19,240 sai ban đầu. 122 00:05:19,240 --> 00:05:22,540 Sau đó, trong luồng suy nghĩ của cá, chúng tôi sẽ kiểm tra để xem nếu 123 00:05:22,540 --> 00:05:25,400 cá đã tìm thấy thức ăn trước khi hiển thị "Tôi đói" 124 00:05:25,400 --> 00:05:26,770 nghĩ rằng bong bóng. 125 00:05:26,770 --> 00:05:29,670 >> Bây giờ, chạy chương trình một lần nữa, chúng ta thấy rằng loài cá 126 00:05:29,670 --> 00:05:31,580 không bị gián đoạn suy nghĩ của đói 127 00:05:31,580 --> 00:05:33,820 nhát cheesy. 128 00:05:33,820 --> 00:05:36,820 Vấn đề cuối cùng chúng ta có là rằng nhát cheesy không đi 129 00:05:36,820 --> 00:05:39,800 đi sau khi cá, trích dẫn unquote, "ăn". 130 00:05:39,800 --> 00:05:42,305 Từ kịch bản cá, không có cách nào dễ dàng để ẩn cheesy 131 00:05:42,305 --> 00:05:44,710 nhát, vì vậy chúng tôi cần phải gửi một thông điệp tới các nhát cheesy 132 00:05:44,710 --> 00:05:46,780 sprite để ẩn thân. 133 00:05:46,780 --> 00:05:49,550 Chúng ta có thể làm điều này với một biến khác mà nhát cheesy 134 00:05:49,550 --> 00:05:52,680 sprite có quyền truy cập, cũng như sprite cá. 135 00:05:52,680 --> 00:05:55,720 >> Tuy nhiên, có một cách sạch hơn để làm điều này trong trường hợp này, 136 00:05:55,720 --> 00:05:57,840 kể từ khi thay vì gửi một thông điệp đến một kịch bản đó là 137 00:05:57,840 --> 00:06:00,570 một nơi nào đó ở giữa thực hiện, chúng tôi có thể gửi 138 00:06:00,570 --> 00:06:03,710 tin nhắn đến một kịch bản mà chờ đợi để bắt đầu. 139 00:06:03,710 --> 00:06:07,360 Chúng tôi làm điều này bằng cách có cá phát sóng một sự kiện, một trong chúng tôi sẽ 140 00:06:07,360 --> 00:06:08,800 gọi ăn. 141 00:06:08,800 --> 00:06:11,510 Sau đó, chúng tôi sẽ tạo ra một kịch bản cho các nhát cheesy sẽ 142 00:06:11,510 --> 00:06:13,030 chờ cho sự kiện này. 143 00:06:13,030 --> 00:06:15,560 Điều này cũng tương tự như sự kiện Bar Space, ngoại trừ việc này 144 00:06:15,560 --> 00:06:19,250 thời gian, người sử dụng không phải là người trực tiếp gây ra sự kiện. 145 00:06:19,250 --> 00:06:22,800 Bây giờ tất cả chúng ta phải làm là thiết lập biến foodFound của chúng tôi trở lại 146 00:06:22,800 --> 00:06:25,750 là sai, và bây giờ chúng tôi có thể cung cấp cho các cá đói như nhiều người 147 00:06:25,750 --> 00:06:28,470 phần nhát cheesy như nó muốn. 148 00:06:28,470 --> 00:06:30,040 >> Vì vậy, không quá xấu, phải không? 149 00:06:30,040 --> 00:06:33,400 Trong C, viết các chương trình đa luồng là phức tạp hơn, 150 00:06:33,400 --> 00:06:35,700 nhưng những điều cơ bản là giống nhau. 151 00:06:35,700 --> 00:06:38,690 Dù sao, tôi hy vọng bạn có một thời gian tuyệt vời xây dựng một số thú vị 152 00:06:38,690 --> 00:06:41,030 đồng thời các chương trình trong Scratch. 153 00:06:41,030 --> 00:06:42,570 Tên là Nate hardison. 154 00:06:42,570 --> 00:06:45,260 Đây là CS50.