你什么时候关闭线程怎么办?比如确保什么都没有打开或跑步?
到目前为止我知道如何打开它,但是……不是如何正确地关闭它
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.
通过简单地从该函数返回或调用 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