c语言线程
⑴ c语言怎么写线程代码
通常使用CreateThread函数来创建新的线程.(Unix下使用pthread_create函数)
首先指出,线程与线程之间,是并列关系,不会存在"父子线程"的概念.
在Windows平台下,CreateThread函数包含在 Windows.h 文件内,包含此文件即可正常使用.
以下为CreateThread函数的声明:
HANDLE CreateThread(
LPSECURITY_ATTRIBUTES lpThreadAttributes,//指向安全性属性描述结构体的
//指针,通常可以忽略的.
SIZE_T dwStackSize,//指定新线程初始的栈大小,若不关心,可以用0填充,来要求使用
//默认值
LPTHREAD_START_ROUTINE lpStartAddress,//用来充当线程的函数的指针.
LPVOID lpParameter,//要传递给函数的参数,这个值本身就是那个参数,而不是参数的地址
DWORD dwCreationFlags,//创建的方式,0表示正常,创建后立即开始运行
LPDWORD lpThreadId//用来接受函数反馈的线程ID的指针.
);
用来充当新的线程的函数格式:
DWORD WINAPI ThreadProc(LPVOID);
CreateThread函数若成功了,返回新线程的句柄,若失败了,则返回NULL.
若用CREATE_SUSPENDED填充dwCreation Flags则创建的线程先挂起来,并不直接开始运行,要用ResumeThread函数恢复线程,才能继续运行.
⑵ C语言多线程的概念
线程:线程是程序中的一个执行流,每个线程都有自己的专有寄存器(栈指针、程序计数器等),但代码区是共享的,即不同的线程可以执行同样的函数。
多线程:多线程是指程序中包含多个执行流,即在一个程序中可以同时运行多个不同的线程来执行不同的任务,也就是说允许单个程序创建多个并行执行的线程来完成各自的任务。
C语言的开始设计,并未设计多线程的机制,由于随着软硬件的发展及需求的发展。后来C语言才开发了线程库以支持多线程的操作、应用。
主要基于linux介绍C多线程。在编译C的多线程时候,一方面必须指定Linux C语言线程库多线程库pthread,才可以正确编译(例如:gcc test.c -o test -lpthread);另一方面要包含有关线程头文件#include <pthread.h>。
⑶ 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>
#include <stdio.h>
#include<time.h>
DWORD WINAPI ThreadProc1( LPVOID lpParam )
{
int i=0;
time_t timer;
while(1)
{
timer=time(NULL);
printf("The current time is: %s\n",asctime(localtime(&timer)));
sleep(1);
}
}
void main()
{
int i=0;
//让主线程进入循环,主线程若退出,子线程1,2会被系统“杀死”
//创建线程1
CreateThread(
NULL, // default security attributes
0, // use default stack size
ThreadProc1, // thread function
NULL, // argument to thread function
0, // use default creation flags
NULL); // returns the thread identifier
for(;;)
{
;
}
}
⑷ C语言线程简单例题
您好,这样的:
通过pthread_join得到的终止状态是不同的,总结如下:
1.如果thread线程通过return返回,rval_ptr所指向的单元里存放的是thread线程函数的返回值。
2. 如果thread线程被别的线程调用pthread_cancel异常终止掉,rval_ptr所指向的单元里存放的是常数PTHREAD_CANCELED。
3.如果thread线程是自己调用pthread_exit终止的,rval_ptr所指向的单元存放的是传给pthread_exit的参数。
⑸ c语言中怎样创建多线程
/*这是我写的最简单的多线程程序,看懂不?*/
#include <windows.h>
#include <stdio.h>
//#include <strsafe.h>
DWORD WINAPI ThreadProc1( LPVOID lpParam )
{
int i=0,j=0;
while(1)
{
printf("hello,this thread 1 ...\n");
//延时
for(i=0;i<200000000;i++)
{
;
}
}
}
DWORD WINAPI ThreadProc2( LPVOID lpParam )
{
int i=0,j=0;
while(1)
{
printf("hello,this thread 2 ...\n");
//延时
for(i=0;i<200000000;i++)
{
;
}
}
}
void main()
{
int i=0;
//创建线程1
CreateThread(
NULL, // default security attributes
0, // use default stack size
ThreadProc1, // thread function
NULL, // argument to thread function
0, // use default creation flags
NULL); // returns the thread identifier
//创建线程2
CreateThread(
NULL, // default security attributes
0, // use default stack size
ThreadProc2, // thread function
NULL, // argument to thread function
0, // use default creation flags
NULL); // returns the thread identifier
//让主线程进入循环,主线程若退出,子线程1,2会被系统“杀死”
while(1)
{
printf("hello,this thread 0 ...\n");
//延时
for(i=0;i<200000000;i++)
{;}
}
}
⑹ c语言怎么创建线程和使用
进程的生命周期:
[1].创建 --- fork
[2].执行 --- a. exec
b.子进程实现代码逻辑
[3].结束 --- exit _exit
僵尸态进程---wait waitpid
孤儿进程
--------------------------------------
进程存在的问题:
(1).进程的创建 --- 复制
(时间 和 空间的开销很大)
(2).进程的运行 --- 调度-->
⑺ c语言实现多线程
目录:
Linux操作系统,C语言实现多线程
Windows操作系统,C语言实现多线程
Windows下的多线程(不带停止)
Linux操作系统,C语言实现多线程:
#include<stdio.h>
#include<stdlib.h>
#include<pthread.h>
void*ThreadOne(void*threadArg)
{
printf("线程开始啦,参数是:%s ",(char*)threadArg);
returnNULL;
}
intmain(void)
{
pthread_tThreadID;/*记录线程标识符*/
void*waitingResult;/*等待线程退出的等待结果*/
interrorCode;/*记录线程的错误代码*/
char*aMessage="这是线程的参数";
/*创建并启动线程ThreadOne。若返回值非零,则线程创建失败*/
errorCode=pthread_create(&ThreadID,NULL,ThreadOne,aMessage);
if(errorCode!=0)
{
printf("线程ThreadOne创建失败。错误代码:%d ",errorCode);
returnEXIT_FAILURE;
}
/*等待线程标识符为的ThreadID的线程结束*/
errorCode=pthread_join(ThreadID,&waitingResult);
if(errorCode!=0)
{
printf("等待线程退出等待失败。错误代码:%d ",errorCode);
returnEXIT_FAILURE;
}
printf("线程的返回值是%p ",waitingResult);
returnEXIT_SUCCESS;
}
Windows操作系统,C语言实现多线程:
#include<stdio.h>
#include<windows.h>
DWORDAPIENTRYThreadOne(LPVOIDthreadArg)
{
printf("线程开始啦,参数是:%s ",(char*)threadArg);
return0;
}
intmain(void)
{
HANDLEhThread;/*记录线程句柄*/
DWORDThreadID;/*记录线程ID号*/
DWORDwaitingResult;/*等待线程退出的等待结果*/
DWORDthreadExitCode;/*记录线程的返回值*/
char*aMessage="这是线程的参数";
/*创建并启动线程ThreadOne,返回值为线程句柄,赋值给hThread*/
hThread=CreateThread(NULL,0L,ThreadOne,(LPVOID)aMessage,0L,&ThreadID);
if(hThread==NULL)
{
printf("线程ThreadOne创建失败。错误代码:%lu ",GetLastError());
returnEXIT_FAILURE;
}
/*等待线程句柄为的hThread线程结束*/
waitingResult=WaitForSingleObject(hThread,INFINITE);
if(waitingResult==WAIT_FAILED)
{
printf("等待线程退出等待失败。错误代码:%lu ",GetLastError());
returnEXIT_FAILURE;
}
if(GetExitCodeThread(hThread,&threadExitCode))
printf("线程的返回值是%lu ",threadExitCode);
else
printf("获取线程的返回值获取失败。错误代码:%lu ",GetLastError());
returnEXIT_SUCCESS;
}
Windows下的多线程:(不带停止)
#include<stdio.h>
#include<windows.h>
DWORDWINAPIoxianchen(LPVOIDlpParam);
intmain(intargc,char*argv[])
{
intnum=0;
CreateThread(NULL,NULL,oxianchen,&num,NULL,NULL);
while(1)
{
num++;
printf("主线程!%05d ",nu***eep(40);
}
return0;
}
DWORDWINAPIoxianchen(LPVOIDlpParam)
{
int*a=lpParam;
while(1)
{
++*a;
printf("副线程!%05d0x%p ",*a,a);
Sleep(80);
}
return0;
}
⑻ C语言有没有线程
C语言当然可以控制线程咯_beginthread(,,)sleep()都是可以用的。
⑼ C语言多线程实现
你是想模拟多线程?还是想用WIN SDK写多线程?
要是是WINSDK 里的东西 看看孙鑫的 MFC 视频就会有的,在第15章,是用WINSDK编写的。
⑽ C语言怎样实现多线程
首先你要有控制蛇移动方向的全局变量(定义在main以外因为线程函数也要调用它,每次键盘输入都会修改它的值), 比如 char direction 'a' ==左 'w' == 右 'd'==上 's' == 下,然后你在移动时应该是在while里面操作的吧,你每移动一步前都读一下direction这个变量的数值然后再控制移动方向(注意s这个键可以忽略因为不会倒着走) 然后你可以用pthread.h这个库 例子是 pthread t;// 定义一个线程 pthread_create(&t, null, listen_keyboard_input, null);//建立线程执行listen_keyboard_input这个函数 这个线程执行的函数 void listen_keyboard_input(){ while(应该通过某个信号来退出这个循环,从而表示游戏结束){ direction =getchar(); } } 但是这里存在同步问题, 比如当这个线程的getchar()在给direction辅助的同时,你控制贪吃蛇移动的线程正在调用 direction的值来判断下一个移动方向,这就会出问题,所以要加一个锁,叫 mutex lock;这个也定义成全局变量可以使各线程共享。 pthread_mutex_t mutex; //定义一个锁 pthread_mutex_init(&mutex, null, null);//初始化 然后把函数修改成 void listen_keyboard_input(){ while(应该通过某个信号来退出这个循环,从而表示游戏结束){ pthread_mutex_lock(&mutex); direction =getchar(); pthread_mutex_unlock(&mutex); } } 另外一个控制贪吃蛇移动的时候也要加锁 while(.....){ char c; pthread_mutex_lock(&mutex); c = direction; pthread_mutex_unlock(&mutex); switch(c){ ................ } ................................... } 这样就好了 注意你的控制贪吃蛇移动的部分也必须要放在另外一个pthread 里面执行,如果放在主线程, 主线程会一直等listen_keyboard_input而什么事都不会做 你把这两个线程用 pthread_create 创建完成后 用 t1.join(); t2.join(); 就可以使这两个线程并发执行了 如果你用的是linux 来编译的,你再输入gcc 指令后加上 -lpthread 就可以了 还有什么不懂的你可以多找找 pthread 类的例子