ത്രെഡുകൾ#

ആമുഖം#

ത്രെഡുകൾ ഒരു റോബോട്ടിനെ ഒരേ പ്രോഗ്രാമിൽ ഒരേസമയം ഒന്നിലധികം ജോലികൾ ചെയ്യാൻ അനുവദിക്കുന്നു. മൾട്ടിടാസ്കിംഗ് സാധ്യമാക്കുന്നതിലൂടെ, റോബോട്ടിന് ഒരേ സമയം സ്വതന്ത്രമായ പ്രവർത്തനങ്ങൾ നടത്താൻ കഴിയും.

ക്ലാസ് കൺസ്ട്രക്‌ടറുകൾ#

1 — ഒരു ഫംഗ്ഷൻ ഉപയോഗിച്ച് ഒരു പുതിയ ത്രെഡ് സൃഷ്ടിക്കുകയും ആരംഭിക്കുകയും ചെയ്യുന്നു.

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

2 — ഒരു ആർഗ്യുമെന്റ് സ്വീകരിക്കുന്ന ഒരു ഫംഗ്ഷൻ ഉപയോഗിച്ച് ഒരു പുതിയ ത്രെഡ് സൃഷ്ടിക്കുകയും ആരംഭിക്കുകയും ചെയ്യുന്നു.

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

ക്ലാസ് ഡിസ്ട്രക്റ്റർ#

thread ഒബ്‌ജക്റ്റ് നശിപ്പിക്കുകയും അനുബന്ധ ഉറവിടങ്ങൾ പുറത്തുവിടുകയും ചെയ്യുന്നു.

~thread();

പാരാമീറ്ററുകൾ#

പാരാമീറ്റർ

ടൈപ്പ് ചെയ്യുക

വിവരണം

callback

void (*)(void)

പുതിയ ത്രെഡിൽ പ്രവർത്തിക്കുന്ന, മുമ്പ് നിർവചിക്കപ്പെട്ട ഒരു ഫംഗ്ഷൻ.

callback

int (*)(void *)

ഒരു void പോയിന്റർ ആർഗ്യുമെന്റ് സ്വീകരിക്കുകയും പുതിയ ത്രെഡിൽ പ്രവർത്തിക്കുകയും ചെയ്യുന്ന, മുമ്പ് നിർവചിക്കപ്പെട്ട ഒരു ഫംഗ്ഷൻ.

arg

void *

കോൾബാക്ക് ഫംഗ്ഷനിലേക്ക് കൈമാറുന്ന ഒരു ശൂന്യ പോയിന്റർ.

കുറിപ്പുകൾ#

  • ഒരു ഫംഗ്ഷൻ വിളിക്കുന്നതിന് മുമ്പ് എല്ലായ്പ്പോഴും നിർവചിച്ചിരിക്കണം*.

  • നിങ്ങൾ ഒരു ത്രെഡ് സൃഷ്ടിക്കുമ്പോൾ, നിങ്ങളുടെ പ്രോജക്റ്റിൽ അത് വ്യക്തിഗതമായി കൈകാര്യം ചെയ്യുന്നതിനായി അതിന് പേര് നൽകാം.

  • interrupt()ഉപയോഗിച്ച് ഒരു ത്രെഡ് നിർത്തിയാൽ, അത് പുനരാരംഭിക്കാൻ കഴിയില്ല. അത് വീണ്ടും പ്രവർത്തിപ്പിക്കാൻ, നിങ്ങൾ ഒരു പുതിയ ത്രെഡ് സൃഷ്ടിക്കണം.

ഉദാഹരണം#

ഫംഗ്ഷൻ നിർവചിക്കുക ( 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);
  }
}

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);
}

ഫംഗ്ഷൻ നിർവചിക്കുക ( 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);
}

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);
}

അംഗ പ്രവർത്തനങ്ങൾ#

ത്രെഡ് ക്ലാസ്സിൽ ഇനിപ്പറയുന്ന അംഗ പ്രവർത്തനങ്ങൾ ഉൾപ്പെടുന്നു:

  • interrupt – പശ്ചാത്തല സ്വഭാവം നിർത്താൻ ഉപയോഗപ്രദമായ ഒരു ത്രെഡ് സ്വമേധയാ നിർത്തുന്നു.

interrupt#

ഒരു ത്രെഡ് സ്വമേധയാ നിർത്തുന്നു, ഒരു ടാസ്‌ക് ഇനി ആവശ്യമില്ലാത്തപ്പോഴോ ഒരു പ്രോഗ്രാമിന് ത്രെഡുകൾ പുനഃസജ്ജമാക്കേണ്ടിവരുമ്പോഴോ ഇത് ഉപയോഗപ്രദമാണ്.

Available Functions
void interrupt();

Parameters

ഈ ഫംഗ്ഷന് പാരാമീറ്ററുകൾ ഇല്ല.

Return Values

ഈ ഫംഗ്ഷൻ ഒരു മൂല്യം തിരികെ നൽകുന്നില്ല.

Notes
  • ഒരു ത്രെഡ് നിർത്തിയാൽ, അത് പുനരാരംഭിക്കാൻ കഴിയില്ല. അത് വീണ്ടും പ്രവർത്തിപ്പിക്കാൻ, നിങ്ങൾ thread ഉപയോഗിച്ച് ഒരു പുതിയ ത്രെഡ് സൃഷ്ടിക്കണം.

  • ഒരു ടാസ്‌ക് ഇനി ആവശ്യമില്ലാത്തപ്പോഴോ ഒരു പ്രോഗ്രാമിന് ത്രെഡുകൾ പുനഃസജ്ജമാക്കാനോ വീണ്ടും അസൈൻ ചെയ്യാനോ ആവശ്യമുള്ളപ്പോഴോ ഇത് ഉപയോഗപ്രദമാണ്.

Examples

ഫംഗ്ഷൻ നിർവചിക്കുക ( 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);
  }
}

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();
}