Вы можете объединить все навигаторы на одной странице, если вы импортируете все страницы.
import WelcomeScreen from './WelcomeScreen.js',
import ProfileScreen from './ProfileScreen.js',
import SettingsScreen from './SettingsScreen.js',
import LogoutScreen from './LogoutScreen.js',
const WelcomeTabNavigator = createBottomTabNavigator({
Welcome: {screen: WelcomeScreen,},
Profile: {screen: ProfileScreen,},
Settings: {screen: SettingsScreen,},
},
const WelcomeStackNavigator = createStackNavigator({
Home: {screen: WelcomeTabNavigator,},
Logout: {screen: LogoutScreen,},
})
class App extends React.Component {
render() {
return <WelcomeStackNavigator />;
}
}
export default App;
Простое решение состояло бы в том, чтобы заблокировать сигнал SIGCHLD прежде fork()
с sigprocmask()
и разблокируйте его в родительском коде после обработки pid.
Если ребенок умер, обработчик сигналов для SIGCHLD назовут после разблокирования сигнала. Это - критическое понятие раздела - в Вашем случае, который критический раздел запускает прежде fork()
и концы после children.add()
.
В дополнение к существующим "детям" добавляют новую структуру данных "ранние смертельные случаи". Это будет содержать содержание в чистоте детей.
// main program excerpt
for (;;) {
if ( is_time_to_make_babies ) {
pid = fork();
if (pid == -1) {
/* fail */
} else if (pid == 0) {
/* child stuff */
print "child started"
exit
} else {
/* parent stuff */
print "parent forked new child ", pid
if (!earlyDeaths.contains(pid)) {
children.add(pid);
} else {
earlyDeaths.remove(pid);
}
}
}
}
// SIGCHLD handler
sigchld_handler(signo) {
while ( (pid = wait(status, WNOHANG)) > 0 ) {
print "parent caught SIGCHLD from ", pid
if (children.contains(pid)) {
children.remove(pid);
} else {
earlyDeaths.add(pid);
}
}
}
Править: это может быть упрощено, если Ваш процесс единственный, распараллелил - earlyDeaths, не должен быть контейнер, он просто должен содержать один pid.
Если вы не можете использовать критический фрагмент, возможно, простой счетчик может сделать эту работу. +1 при добавлении, -1 при удалении, неважно, какое из них произойдет первым, в конце концов, вы можете получить ноль, когда все будет сделано.