#ifdef _WIN32 # include #else # include #endif #include #include "pthread.h" void cleanup (void *p) { fprintf (stderr, "cleanup\n"); } void *t (void *) { pthread_cleanup_push (cleanup, NULL); for (int i = 0; i < 5; i++) { fprintf (stderr, "do...\n"); #ifdef _WIN32 Sleep (1000); #else sleep (1); #endif pthread_exit (NULL); } pthread_cleanup_pop (1); return NULL; } int main () { pthread_t t1; pthread_create (&t1, NULL, t, NULL); pthread_join (t1, NULL); fprintf (stderr, "return\n"); getchar (); return 0; }