更新时间:2021-08-13 21:36:19
您正在寻找类似的东西这...
You are looking for something like this...
class Player {
public:
virtual void run() = 0;
};
class Player1: public Player {
public:
void run(); // you must implement then for Player1, 2, 3
};
void doRun(Player * player)
{
player->run();
}
int main(int argc, char * argv[]) {
Player1 player1;
Player2 player2;
Player3 player3;
thread thread1(doRun, &player1);
thread thread2(doRun, &player2);
thread thread3(doRun, &player3);
thread1.join();
thread2.join();
thread3.join();
return 0;
}
如果愿意,还可以使用lambda表达式:
If you prefer, you can also use lambda expressions:
int main(int argc, char * argv[]) {
Player1 player1;
Player2 player2;
Player3 player3;
thread thread1([&] (Player * player) { player->run(); }, &player1);
thread thread2([&] (Player * player) { player->run(); }, &player2);
thread thread3([&] (Player * player) { player->run(); }, &player3);
thread1.join();
thread2.join();
thread3.join();
return 0;
}
或者,按照DyP的建议:
Or, following DyP suggestion:
int main(int argc, char * argv[]) {
Player1 player1;
Player2 player2;
Player3 player3;
thread thread1(&Player::run, player1);
thread thread2(&Player::run, player2);
thread thread3(&Player::run, player3);
thread1.join();
thread2.join();
thread3.join();
return 0;
}