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 Για παράδειγμα, μπορεί να εργάζεστε σε ένα πρόγραμμα περιήγησης στο Web, όπως 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 Είναι η δουλειά του λειτουργικού συστήματος, 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 πάει από τον έλεγχο σελίδα σας στο Facebook να εργάζεται για το δοκίμιό σας 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 διαφορετικές καρτέλες ανοίξει στο web browser σας, μία για το ηλεκτρονικό ταχυδρομείο, 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 όπως το Google Chrome κάνει, αλλά πολλά προγράμματα χρησιμοποιούν μια 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 Αυτό είναι αυτό που καθιστά δυνατή για να μπορείτε να περιηγηθείτε στο Facebook 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 Έτσι, αυτό το γενικό θέμα, που είναι γνωστή ως ταυτοχρονισμού, συνήθως 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 >> Όταν δημιουργείτε προγράμματα Scratch, είστε συνεχώς 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 Ας δούμε ένα απλό πρόγραμμα Scratch για να δούμε πώς αυτό λειτουργεί. 42 00:01:58,040 --> 00:02:01,730 >> Εδώ, έχουμε ένα αντικείμενο ψάρι, ή Sprite, με δύο σενάρια 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 Αυτό το script τρέχει επίσης για πάντα. 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 τυρώδης εισπνοές για να φάει. 63 00:02:50,670 --> 00:02:53,060 Ελπίζουμε ότι δεν θα διασπώνται στο νερό. 64 00:02:53,060 --> 00:02:55,560 Όταν έχουμε προσθέσει σε ένα δεύτερο sprite, θα είναι επίσης σε θέση να 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 πεινασμένο ψάρι παίρνει τροφή, ας πούμε ότι κάθε φορά που η Space 70 00:03:09,340 --> 00:03:11,840 Μπαρ χτυπιέται, τυρώδης ρουφηξιές εμφανιστεί στη σκηνή για το 71 00:03:11,840 --> 00:03:13,300 ψάρια για να φάνε. 72 00:03:13,300 --> 00:03:15,760 Πριν χτυπήσει το Space Bar, θα θέλετε να κρατήσετε την τυρώδης 73 00:03:15,760 --> 00:03:19,020 εισπνοές κρυμμένα έτσι ώστε τα ψάρια δεν μπορούν να τα δουν. 74 00:03:19,020 --> 00:03:21,140 Για να το κάνετε αυτό, θα χρειαστείτε ένα ζευγάρι των σεναρίων για την 75 00:03:21,140 --> 00:03:22,750 τυρώδης ρουφηξιές sprite. 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 >> Το επόμενο σενάριο που έχουμε θα περιμένουμε για το Space Bar για να 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 Space handler μας εκδήλωση Bar θα δείτε τα τυρώδης εισπνοών για 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 ελέγχει εάν ή όχι αυτό είναι το άγγιγμα των τυρώδης ρουφηξιές. 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 >> OK. 99 00:04:22,000 --> 00:04:23,785 Τώρα, ας τρέξει το πρόγραμμα Scratch μας. 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 Όταν χτυπήσει το Space Bar, οι ριπές τυρώδης έρχονται σε θέα, 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 ισχύει όταν τα ψάρια τρέχει στα τυρώδης ρουφηξιές. 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 τυρώδης ρουφηξιές είναι έξω. 128 00:05:33,820 --> 00:05:36,820 Το τελευταίο πρόβλημα που έχουμε είναι ότι οι τυρώδης εισπνοές δεν πηγαίνουν 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 εισπνοών, γι 'αυτό πρέπει να στείλετε ένα μήνυμα στους τυρώδης ρουφηξιές 132 00:05:44,710 --> 00:05:46,780 sprite να κρυφτεί. 133 00:05:46,780 --> 00:05:49,550 Θα μπορούσαμε να το κάνουμε αυτό με μια άλλη μεταβλητή ότι οι τυρώδης ρουφηξιές 134 00:05:49,550 --> 00:05:52,680 sprite έχει πρόσβαση σε, καθώς και το sprite ψαριών. 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 Στη συνέχεια, θα δημιουργήσετε μια δέσμη ενεργειών για τις τυρώδης ρουφηξιές που θα 142 00:06:11,510 --> 00:06:13,030 περιμένετε για αυτό το γεγονός. 143 00:06:13,030 --> 00:06:15,560 Αυτό είναι παρόμοιο με την εκδήλωση Bar Διαστήματος, εκτός του ότι αυτό 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 μερίδες τυρώδης ρουφηξιές όπως θέλει. 148 00:06:28,470 --> 00:06:30,040 >> Έτσι, δεν είναι και τόσο άσχημα, έτσι δεν είναι; 149 00:06:30,040 --> 00:06:33,400 Στην C, γράφοντας multi-threaded προγράμματα είναι πιο περίπλοκη, 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 ταυτόχρονη προγράμματα Scratch. 153 00:06:41,030 --> 00:06:42,570 Το όνομά μου είναι Nate Hardison. 154 00:06:42,570 --> 00:06:45,260 Αυτό είναι CS50.