next up previous contents
Next: B.1.5 Ustavljanje delavcev Up: B.1.4 Upodabljanje Previous: Dodeljevanje naslednje naloge Vsebina: contents

Zajem rezultatov

Sledeci podprogram zbira rezultate in dodeljuje nove naloge delavcem. static int
* claim_tile ()
* {
* int info, bufid, tid, y1, y2, size, job, s;

/* Cakaj na rezultat kateregakoli delavca */
* bufid = pvm_recv (-1, MSGDATA);
* pvm_bufinfo(bufid, (int *)0, (int *)0, &tid );

Iz sporocila je potrebno izlociti informacijo o posiljatelju. for(s = nserv; s-- > 0; )
* if(tid == servtids[s])
* break;

if ( s < 0 )
* {
* fprintf (stderr, "bogus tile data message from t%x ?\n", tid);
* fputs("Valid tids:", stderr);
* for(s = 0; s < nserv; s++)
* printf("<t%x>", servtids[s]);
* fputs("\n", stderr);
* return -1;
* }

Odpakira rezultate in jih shrani na ustrezno mesto.

pvm_upkint(&job, 1, 1);
* pvm_upkint(&y1, 1, 1);
* pvm_upkint(&y2, 1, 1);
* size = (y2 - y1) * width * 3; /* stevilo RGB trojic */
* image[job] = (char *) malloc( size );
* info = pvm_upkbyte(image[job], size, 1);

servtiles[s]++; /* statistika porabe racunalnikov */
* jobstogo--;

if (verbose)
* {
* printf("<%d>", job);
* }

Oznaci streznik kot prosti

servflist[s] = servfree;
* servfree = s;

/* Dodeli novo delo, ce ga je se kaj */
* if ( jobnext )
* send_nextjob();

return 0;
* }


Copyright © 1995 Leon Kos, Univerza v Ljubljani