C语言创建线程问题(急)

c语言怎么创建线程和使用~

1、添加线程相关的头文件:#include
2、线程创建函数是pthread_create()函数,该函数的原型为:
int pthread_create(pthread_t *thread,pthread_attr_t *attr,void* (*start_routine)(void*),void *arg);3、线程退出函数是pthread_exit()函数,该函数的原型为:
void pthread_exit(void *retval);创建线程的示例程序如下:
/***程序说明:创建线程函数pthread_create()函数的使用。*/#include #include #include #include #include //打印标识符的函数void print_ids(const char *str){pid_t pid;//进程标识符pthread_t tid;//线程标识符pid=getpid();//获得进程号tid=pthread_self();//获得线程号printf("%s pid:%u tid:%u (0x%x)
",str,(unsigned int)pid,(unsigned int)tid,(unsigned int)tid); //打印进程号和线程号}//线程函数void* pthread_func(void *arg){print_ids("new thread:");//打印新建线程号return ((void*)0);}//主函数int main(){int err;pthread_t ntid;//线程号err=pthread_create(&ntid,NULL,pthread_func,NULL);//创建一个线程if(err != 0){printf("create thread failed:%s
",strerror(err));exit(-1);}print_ids("main thread:");//打印主线程号sleep(2);return 0;}

进程的生命周期:[1].创建 --- fork [2].执行 --- a. execb.子进程实现代码逻辑[3].结束 --- exit _exit僵尸态进程---wait waitpid孤儿进程--------------------------------------进程存在的问题:(1).进程的创建 --- 复制(时间 和 空间的开销很大)(2).进程的运行 --- 调度-->
pthread_create创建一个线程,thread是用来表明创建线程的ID,attr指出线程创建时候的属性,我们用NULL来表明使用缺省属性。start_routine函数指针是线程创建成功后开始执行的函数,arg是这个函数的唯一一个参数。表明传递给start_routine的参数。
pthread_exit函数和exit函数类似用来退出线程.这个函数结束线程,释放函数的资源,并在最后阻塞,直到其他线程使用pthread_join函数等待它。然后将*retval的值传递给**thread_return.由于这个函数释放所以的函数资源,所以retval不能够指向函数的局部变量。
pthread_join和wait调用一样用来等待指定的线程。下面我们使用一个实例来解释一下使用方法.在实践中,我们经常要备份一些文件。下面这个程序可以实现当前目录下的所有文件备份。
参考资料
CSDN.CSDN [引用时间2018-1-9]

你调用pthread_create之后就return掉了,然后程序结束了,在thread_fun执行之前就结束了,自然就没打印那个出来
你可以在pthread_create之后卡个几秒钟(用sleep)或者用pthread_join还是啥的等线程结束再退出,就能看到thread_fun的输出了

在编译时加上-lpthread参数,以调用链接库。因为pthread并非Linux系统的默认库,而是posix线程库,在Linux中将其作为一个库来使用,因此加上 -lpthread(或-pthread)以显示的链接该库。函数在执行错误时的错误信息将作为返回值返回,并不修改系统全局变量errno,当然也无法使用perror()打印错误信息。

你在服务器最后return
0;前面加一句while(1);
你得让服务器主线程不停下,不然主线程挂了,其他的所有线程都会一起挂了。

用AfxBeginThread创建线程出错,直接调用函数却正常,怎么回事?!_百度知...
答:void CDirWatcherDlg::OnBnClickedButtonStart(){ Params* pParams = new Params;...CWinThread *MyThread = AfxBeginThread(WatchThread,pParams);} UINT WatchThread(LPVOID lpParam){ Params* pi = (Params*)lpParam;...delete pi;} 这种方法编码简单,但问题是 pPararms 是 new 出来的,每...

C语言线程的问题,求大神改正程序
答:DWORD WINAPI Fun1Proc(LPVOID pPararneter) //线程1 { while(TRUE){ WaitForSingleObject(hMutex,INFINITE); //在此获取对象的使用权 printf("输入电梯请求:");scanf("%c",&num);while (getchar() != '\n') //将输入流中的回车吃掉 continue;while(num!='\n'){ currentPtr=...

C语言怎么写线程代码
答:LPDWORD lpThreadId//用来接受函数反馈的线程ID的指针.);用来充当新的线程的函数格式:DWORD WINAPI ThreadProc(LPVOID);CreateThread函数若成功了,返回新线程的句柄,若失败了,则返回NULL.若用CREATE_SUSPENDED填充dwCreation Flags则创建的线程先挂起来,并不直接开始运行,要用ResumeThread函数恢复线程,才能继续...

C/C++多线程问题?
答:WINDOWS线程需要这样的函数体:DWORD WINAPI thread_proc(LPVOID lpParam){ ...return 0;} C语言中直接调用线程就是CreateThread(&thread_proc, ...)即可 因为C++的类是在运行阶段分配地址,而不是在编译阶段分配地址,所以要想在类函数中声明线程,就必须强制把线程成员函数设置为编译阶段就分配地址,...

c语言如何编写一个简单的多线程程序?
答:这是一个多线程例子,里面只有两个线程,是生产者/消费者模式,已编译通过,注释很详细,\x0d\x0a如下:\x0d\x0a\x0d\x0a/* 以生产者和消费者模型问题来阐述Linux线程的控制和通信你 \x0d\x0a 生产者线程将生产的产品送入缓冲区,消费者线程则从中取出产品。\x0d\x0a 缓冲...

c语言如何实现测试Windows 系统创建进程和线程的能力
答:下面为C语言调用WIN API实现创建线程:1,导入<windows.h>头文件 2,声明实现方法DWORD WINAPI ThreadProc1( LPVOID lpParam ) {} 3,在main()方法中调用 CreateThread(NULL,0 ,ThreadProc1,NULL,0,NULL);要注意的是主线程不能结束,如果主线程结束,则它的子线程也会被杀死。include <windows.h>...

linuxc++多线程clinux多线程
答:c语言多线程详解? 概念 线程:线程是程序中的一个执行流,每个线程都有自己的专有寄存器(栈指针、程序计数器等),但代码区是共享的,即不同的线程可以执行同样的函数。 多线程:多线程是指程序中包含多个执行流,即在一个程序中可以同时运行多个不同的线程来执行不同的任务,也就是说允许单个程序创建多个并行执行的线...

C语言基础网络编程求助 如何实现多线程
答://线程 pthread_t id;pthread_attr_t attr;pthread_attr_init(&attr);/// pthread_attr_setdetachstate(&attr,PTHREAD_CREATE_DETACHED);//创建地址 bzero(&server_addr,sizeof(server_addr));server_addr.sin_family =AF_INET;server_addr.sin_port = htons(5555);server_addr.sin_addr.s_...

c线程池c线程linux
答:c语言多线程详解?概念 线程:线程是程序中的一个执行流,每个线程都有自己的专有寄存器(栈指针、程序计数器等),但代码区是共享的,即不同的线程可以执行同样的函数。多线程:多线程是指程序中包含多个执行流,即在一个程序中可以同时运行多个不同的线程来执行不同的任务,也就是说允许单个程序创建...

请教关于C语言的多线程问题
答:这是有可能当主线程(即main函数)执行完后,新创建的线程还没来得及执行,所以应该使主线程先暂停,即使用Sleep()函数 include <windows.h> include <stdio.h> char testdir[100];DWORD WINAPI Fun1( LPVOID lpParameter ){ strcpy(testdir,"this is a test dir");MessageBox(NULL,testdir,"...

IT评价网,数码产品家用电器电子设备等点评来自于网友使用感受交流,不对其内容作任何保证

联系反馈
Copyright© IT评价网