6

完成后如何关闭线程?比如确保没有任何东西是打开的或运行的?

到目前为止我知道如何打开它,但是.. 不知道如何正确关闭它

int  iret1; 
pthread_t thread1;
char *message1;

void *multithreading1( void *ptr ) {
    while (1) {
        // Our function here
    }   
}

int main (int argc, char * const argv[]) {
    if( (iret1=pthread_create( &thread1, NULL, multithreading1, (void*) message1)) )
    {
        printf("Thread creation failed: %d\n", iret1);
    }
    return 0;
}
4

2 回答 2

7

为此,您可以从线程函数 ( multithreading1) 返回或调用pthread_exit()

有关更多信息,请参阅POSIX 线程编程

于 2012-05-30T17:54:12.933 回答
7

“完成后如何关闭线程?”
通过简单地从该函数返回或调用pthread_exit 函数

请注意,调用return还会导致堆栈被展开,并且在启动例程中声明的变量被破坏,因此它比pthread_exit函数更可取:

An implicit call to pthread_exit() is made when a thread other than the thread in
which main() was first invoked returns from the start routine that was used to
create it. The function's return value shall serve as the thread's exit status.

有关更多信息,请查看:return() 与 pthread 启动函数中的 pthread_exit()

“确保没有任何东西被打开或运行”而不是确定你的线程是否仍在运行,你应该使用pthread_join 函数
等待它的终止。

这是一个例子:

void *routine(void *ptr) {
    int* arg = (int*) ptr; // in C, explicit type cast is redundant
    printf("changing %d to 7\n", *arg);
    *arg = 7;
    return ptr;
}

int main(int argc, char * const argv[]) {
    pthread_t thread1;
    int arg = 3;
    pthread_create(&thread1, NULL, routine, (void*) &arg);

    int* retval;
    pthread_join(thread1, (void**) &retval);
    printf("thread1 returned %d\n", *retval);
    return 0;
}

输出

changing 3 to 7
thread1 returned 7
于 2012-05-30T18:13:07.610 回答