[Powered by Google Translate] Nate Hardison: Cando ten varios programas abertos nun ordenador, parece que está todo executando ao mesmo tempo. Por exemplo, pode estar a traballar nun navegador web como Firefox ou Internet Explorer, a escoitar música no iTunes, e escribir unha redacción co Word. Con todo, baixo o capo, os programas realmente executar un de cada vez. É o traballo do sistema operativo, Windows, Mac OSX ou Linux para administrar cada un destes procesos separados, como o programas son coñecidos, e cambiar entre elas, de xeito que cando ir comprobar a súa páxina en Facebook para traballar no seu ensaio novo, o Word é o único que está en execución. Ás veces, porén, queremos programas de eles mesmos poidan facer varias cousas como esta, tamén. Se vostede é como eu, probablemente ten unha morea de pestanas diferentes aberto no seu navegador, un para o correo electrónico, un con un calendario, e así por diante. Poderiamos tratar cada separador como un programa separado ou proceso, como o Google Chrome fai, pero moitos programas usan un peso-leve versión dun proceso chamado de un fío. Un segmento é só unha outra unidade de procesamento, un conxunto de instrucións ou de código que poden "executar", pecha comiñas, simultaneamente con outros segmentos. Isto é o que fai posible para navegar en Facebook ao escoitar-me no fondo ou ter dous Vídeos de YouTube tocando ao mesmo tempo. Así, este tema xeral, coñecido como competencia, normalmente non vén tan pronto nos cursos de ciencia da computación porque os detalles de nivel inferior requiren unha discusión de sistemas operativos e outros semellantes. Con todo, a linguaxe de programación que usan na inicio do CS50, scratch, ofrece algunhas ferramentas legais para facelo máis fácil de escribir programas con varias cousas ocorrer ao mesmo tempo. Cando construír programas Scratch, está constantemente traballando con roscas. Cada guión scratch, que é un bloque de código que comeza con un dos "cando" pezas do puzzle, pode ser pensado como un segmento separado. Vexamos un programa sinxelo arranhão para ver como funciona isto. Aquí temos un obxecto, peixe ou Sprite, con dous scripts que tanto o principio, cando prememos no botón pequena bandeira verde. O primeiro guión controla o movemento dos peixes. Cando a bandeira verde é premendo, o peixe colócase na parte esquerda da pantalla, o chamado estadio, volto para a dereita. Entón, nun conxunto de instrucións que vai executar para sempre, ata que deter o programa, o peixe desliza para o lado dereito, se vira, vai volver para o lado esquerdo, e se vira de novo. O segundo guión controla o proceso do peixe pensamento. Acontece que este é un peixe con fame. Entón, despois de esperar por 3 segundos, o peixe vai pensar, "Estou con fame", para un segundo cuarto. Este script tamén funciona sempre. E como podemos ver, a execución do programa premendo no bandeira verde, os dous scripts aparecer para realizar simultaneamente. O peixe e pensa que ao mesmo tempo. Dende o pobre peixe parece tan con fame, imos engadir, nalgúns puffs de queixo para el comer. Esperamos que non se desintegran na auga. Cando engadir un sprite segundo, nós tamén imos ser capaces de engadir en guións correspondentes a ese sprite. E, polo tanto, haberá un outro conxunto de temas que vai executar. Para dar ao usuario de noso control sobre cando o programa peixes con fame recibe comida, imos dicir que sempre que o espazo Bar é atinxido, puffs queixo aparecer no escenario para o peixe para comer. Antes de bater a barra de espazo, imos querer manter o brega puffs escondido para que o peixe non pode ve-los. Para iso, imos ter un par de scripts para o puffs sprites de queixo. O primeiro guión, a bandeira verde, vai só ocultar a comida. Ao contrario dos outros scripts que escribir, este non ha manter executar para sempre. El vai comezar e rematar moi rapidamente, non cando prememos o botón de bandeira verde. O seguinte script, temos que esperar a barra de espazo para Prema antes de executar. Podemos chamar de espera para entrada do usuario "espera" ou "escoita" para un evento. E o código que se executa cando un evento é recibido ou oído chámase código de manipulación de eventos. O noso Espazo manipulador de eventos Bar vai amosar as bafaradas de queixo a pantalla para que o peixe pode comer. Neste punto, todo parece bo. A seguinte cousa que cómpre facer é descubrir como chegar o peixe para entender que non hai comida para comer. Imos engadir outra liña para o peixe que constantemente comproba se é ou non é tocando as bafaradas de queixo. Facemos isto nun segmento separado dende que xeito podemos comprobar constantemente por comida. Se non, só será capaz de comprobar periódicamente por comida entre delta, xirando en torno, esperando, ou pensar. Aceptar. Agora imos facer o noso programa Scratch. Como esperaba, a comida inmediatamente oculta e á peixes con fame nada e cara atrás como antes. Cando bateu a barra de espazo, os sopros de queixo entran en vista, e os peixes con fame di whoo. Pero espera, iso é raro. Como é que o peixe "Teño fame" interrompe o pensamento outras cousas? Isto é porque non estableceu ningunha coordinación entre os tres guións de peixe. Cada un é executado no seu propio segmento, alleo ao que o outros están facendo. Imos solucionar isto antes de seguir adiante. A coordinación entre os segmentos é unha tarefa complicada, xa que non control total sobre cando cada segmento é executado ou non é executado. Para enviar unha mensaxe dun segmento a outro, nós imos ter usar unha variable que pode definir, ou escribir, nunha thread e ler na outra. Imos crear unha variable chamada foodFound que podemos definir a certo cando o peixe corre para os sopros de queixo. Ben, por suposto, queremos estar seguro de que configuralo para false inicialmente. A continuación, na liña do peixe pensamento, imos comprobar a ver se o peixe atopou comida antes de ver o "estou con fame" penso burbulla. Agora, a execución do programa novo, vemos que o peixe non queda detido con pensamentos de fame cando o puffs de queixo están fóra. O último problema que temos é que os sopros de queixo non van aínda despois de que o peixe, entre comiñas, "come-los". A partir dos guións de peixe, non hai ningunha forma fácil de ocultar o brega puffs, por iso necesitamos enviar unha mensaxe para os sopros de queixo sprite para esconderse. Nós poderiamos facelo con outra variable que as bafaradas de queixo Sprite ten acceso, así como o sprite peixe. Con todo, hai un xeito máis limpa de facelo neste caso, pois en vez de enviar unha mensaxe a un script que é en algún lugar no medio da execución, podemos enviar o mensaxe a un script que está esperando para comezar. Nós facemos isto por ter o peixe transmisión dun evento, un Nós chamar comido. Entón, nós imos crear un script para os sopros de queixo que ganas esperar a este evento. Isto é semellante ao caso a barra de espazo, só que desta tempo, o usuario non é o único directamente accionando o evento. Agora todo o que temos que facer é definir redor variable foodFound para false, e agora podemos dar o peixe con fame como moitos porcións de puffs de queixo como el quere. Entón non é tan malo, non? C, escribir multi-Threaded programas é máis complicado, pero os principios son os mesmos. En calquera caso, eu espero que teña un gran momento a construción de un pouco de diversión programas simultáneos en scratch. O meu nome é Nate Hardison. Este é CS50.