Nun gibt's ein anderes Problem, wenn durch den timeout-Thread das Programm neu starten soll: Mit
Code:
// simple timeout
void *
func_timeout (void *threadid)
{
sleep (1); // timeout in s
if (0 >= g_fd) // device file could not be opened
{
printf ("ERROR: Timeout, device file could not be opened.\n");
longjmp(env, 1234);
}
pthread_exit (NULL);
}
komme ich zwar wieder an den Anfang von main und erkenne dort ob der longjmp von dem thread erfolgte, aber nach dem longjmp funktioniert pthread_join nicht; d. h. die Thread-Resoucen werden nicht freigegeben
Und wenn nach dem longjmp vom Timeout-Thread pthread_exit (NULL) aufgerufen wird, erhalte ich
Ungültiger Maschinenbefehl
Vom Timeout-Thread den main-Thread zu terminieren ist wohl nicht möglich, weil dafür das pthread_t von main fehlt.
Irgendwelche Vorschläge?
Lesezeichen