c – 完成后关闭线程

前端之家收集整理的这篇文章主要介绍了c – 完成后关闭线程前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
你什么时候关闭线程怎么办?比如确保什么都没有打开或跑步?

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

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;
}

解决方法

“当你完成时,你如何关闭一个线程?”
通过简单地从该函数返回或调用 pthread_exit function.

请注意,调用return也会导致堆栈被展开,并且在start例程中声明的变量将被销毁,因此它比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() versus pthread_exit() in pthread start functions

“确保没有任何东西可以打开或运行”
您应该使用pthread_join function等待终止,而不是确定您的线程是否仍在运行.

这是一个例子:

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,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

猜你在找的C&C++相关文章