Snáitheanna#

Réamhrá#

Ligeann snáitheanna do róbat tascanna iolracha a rith ag an am céanna laistigh den chlár céanna. Cuireann siad ar chumas iltascanna a dhéanamh, rud a ligeann don róbat gníomhartha neamhspleácha a dhéanamh ag an am céanna.

Tógálaithe Ranga#

1 — Cruthaíonn agus tosaíonn sé snáithe nua le feidhm.

thread( void (* callback)(void) );

2 — Cruthaíonn agus cuireann sé tús le snáithe nua le feidhm a ghlacann le hargóint.

thread( int (* callback)(void *), void *arg );

Scriostóir Ranga#

Scriosann sé an réad thread agus scaoileann sé acmhainní gaolmhara.

~thread();

Paraiméadair#

Paraiméadar

Cineál

Cur síos

callback

void (*)(void)

Feidhm atá sainmhínithe roimhe seo a rithfidh sa snáithe nua.

callback

int (*)(void *)

Feidhm atá sainmhínithe roimhe seo a ghlacann le hargóint pointeora folamh agus a rithfidh sa snáithe nua.

arg

void *

Pointeoir folamh a chuirtear chuig an fheidhm athghlaoite.

Nótaí#

  • Ní mór feidhm a shainmhíniú i gcónaí sula nglaotar uirthi.

  • Nuair a chruthaíonn tú snáithe, is féidir leat ainm a thabhairt dó chun é a bhainistiú ina aonar i do thionscadal.

  • Nuair a stoptar snáithe ag baint úsáide as interrupt(), ní féidir é a atosú. Chun é a rith arís, ní mór duit snáithe nua a chruthú.

Sampla#

Sainmhínigh an fheidhm (lasmuigh de int main())

// Drive forward while blinking screen
void blinkScreen() {
  while (true) {
    Brain.Screen.clearScreen(red);
    wait(0.5, seconds);
    Brain.Screen.clearScreen();
    wait(0.5, seconds);
  }
}

Cláraigh an snáithe taobh istigh de int main()

int main() {
  /* vexcodeInit() is only required when using VEXcode.
  Remove vexcodeInit() if compiling in VS Code. */
  vexcodeInit();

  // Begin project code
  thread blinkScreenThread = thread(blinkScreen);
  Drivetrain.drive(forward);
}

Sainmhínigh an fheidhm (lasmuigh de int main())

// Run multiple threads simultaneously
// Turn right, blink screen at once
void blinkScreen() {
  while (true) {
    Brain.Screen.clearScreen(red);
    wait(0.5, seconds);
    Brain.Screen.clearScreen();
    wait(0.5, seconds);
  }
}

void turning() {
  Drivetrain.turn(right);
}

Cláraigh an snáithe taobh istigh de int main()

int main() {
  /* vexcodeInit() is only required when using VEXcode.
  Remove vexcodeInit() if compiling in VS Code. */
  vexcodeInit();

  // Begin project code
  thread blinkScreenThread = thread(blinkScreen);
  thread turningThread = thread(turning);
}

Feidhmeanna na mBall#

Áirítear leis an rang snáithe na feidhmeanna ball seo a leanas:

  • interrupt – Stopann sé snáithe de láimh, úsáideach chun iompar cúlra a stopadh.

interrupt#

Stopann sé snáithe de láimh, rud atá úsáideach nuair nach bhfuil gá le tasc a thuilleadh nó nuair is gá do chlár snáitheanna a athshocrú.

Available Functions
void interrupt();

Parameters

Níl paraiméadair ag an bhfeidhm seo.

Return Values

Ní thugann an fheidhm seo luach ar ais.

Notes
  • Nuair a stoptar snáithe, ní féidir é a atosú. Chun é a rith arís, ní mór duit snáithe nua a chruthú ag baint úsáide as thread.

  • Tá sé seo úsáideach nuair nach bhfuil gá le tasc a thuilleadh nó nuair is gá do chlár snáitheanna a athshocrú nó a athshannadh.

Examples

Sainmhínigh an fheidhm (lasmuigh de int main())

// Loop through red and green
void colorLoop() {
  while (true) {
    Brain.Screen.drawRectangle(0, 120, 480, 120, red);
    wait(0.5, seconds);
    Brain.Screen.drawRectangle(0, 120, 480, 120, green);
    wait(0.5, seconds);
  }
}

// Display the current heading
void displayHeading() {
  Brain.Screen.setFont(prop60);
  while (true) {
    Brain.Screen.clearLine(1);
    Brain.Screen.setCursor(1, 1);
    Brain.Screen.print(
      "Heading: %.1f",
      DrivetrainInertial.heading(degrees)
    );
    wait(50, msec);
  }
}

Cláraigh an snáithe taobh istigh de int main()

int main() {
  /* vexcodeInit() is only required when using VEXcode.
  Remove vexcodeInit() if compiling in VS Code. */
  vexcodeInit();

  // Turn right, change screen color, and display heading at once
  thread colorThread = thread(colorLoop);
  thread displayHeadingThread = thread(displayHeading);

  Drivetrain.turn(right);
  wait(2, seconds);

  // Stop the flashing colors
  colorThread.interrupt();
}