windows线程while怎么退出
答案:2 悬赏:80 手机版
解决时间 2021-12-23 19:13
- 提问者网友:喧嚣尘世
- 2021-12-22 21:00
windows线程while怎么退出
最佳答案
- 五星知识达人网友:杯酒困英雄
- 2021-12-22 21:52
可以通过以下几种方法创建一个线程:
1、CreateThread
2、_beginthread
3、_beginthreadex
4、AfxBeginThread
--------------------------------------------------------------------------------------
1、CreateThread
函数原型
HANDLE CreateThread( LPSECURITY_ATTRIBUTES lpThreadAttributes, // SD
SIZE_T dwStackSize, // initial stack size
LPTHREAD_START_ROUTINE lpStartAddress, // thread function
LPVOID lpParameter, // thread argument
DWORD dwCreationFlags, // creation option
LPDWORD lpThreadId // thread identifier);
参数:
lpThreadAttributes:指向SECURITY_ATTRIBUTES型态的结构的指针。在Windows 98中忽略该参数。在Windows NT中,NULL使用默认安全性,不可以被子线程继承,否则需要定义一个结构体将它的bInheritHandle成员初始化为TRUE
dwStackSize:设置初始栈的大小,以字节为单位,如果为0,那么默认将使用与调用该函数的线程相同的栈空间大小。任何情况下,Windows根据需要动态延长堆栈的大小。
lpStartAddress:指向线程函数的指针,必须以下列形式声明:
DWORD WINAPI ThreadProc (LPVOID lpParam) ,格式不正确将无法调用成功。
//也可以直接调用void类型
//但lpStartAddress要这样通过LPTHREAD_START_ROUTINE转换如:(LPTHREAD_START_ROUTINE)MyVoid
//然后在线程声明为:
void MyVoid()
{
return;
}
lpParameter:向线程函数传递的参数,是一个指向结构的指针,不需传递参数时,为NULL。
dwCreationFlags :线程标志,可取值如下:
--------------------------------------------------------------------------------------
CREATE_SUSPENDED(0x00000004):创建一个挂起的线程,
0:表示创建后立即激活。
STACK_SIZE_PARAM_IS_A_RESERVATION(0x00010000):dwStackSize参数指定初始的保留堆栈的大小,否则,dwStackSize指定提交的大小。该标记值在Windows 2000/NT and Windows Me/98/95上不支持。
--------------------------------------------------------------------------------------
lpThreadId:保存新线程的id。
返回值:
函数成功,返回线程句柄;函数失败返回false。若不想返回线程ID,设置值为NULL。
实例:
PMYDATA pData;
pData = (PMYDATA)HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY,
sizeof(MYDATA));
if( pData == NULL )
ExitProcess(2);
// Generate unique data for each thread.
pData->val1 = i;
pData->val2 = i+100;
HANDLE hThread = CreateThread( NULL, // default security attributes
0, // use default stack size
ThreadProc, // thread function
pData, // argument to thread function
0, // use default creation flags
&dwThreadId[i]); // returns the thread identifier
// Check the return value for success.
if (hThread == NULL)
{
ExitProcess(i);
}
2、_beginthread
1、CreateThread
2、_beginthread
3、_beginthreadex
4、AfxBeginThread
--------------------------------------------------------------------------------------
1、CreateThread
函数原型
HANDLE CreateThread( LPSECURITY_ATTRIBUTES lpThreadAttributes, // SD
SIZE_T dwStackSize, // initial stack size
LPTHREAD_START_ROUTINE lpStartAddress, // thread function
LPVOID lpParameter, // thread argument
DWORD dwCreationFlags, // creation option
LPDWORD lpThreadId // thread identifier);
参数:
lpThreadAttributes:指向SECURITY_ATTRIBUTES型态的结构的指针。在Windows 98中忽略该参数。在Windows NT中,NULL使用默认安全性,不可以被子线程继承,否则需要定义一个结构体将它的bInheritHandle成员初始化为TRUE
dwStackSize:设置初始栈的大小,以字节为单位,如果为0,那么默认将使用与调用该函数的线程相同的栈空间大小。任何情况下,Windows根据需要动态延长堆栈的大小。
lpStartAddress:指向线程函数的指针,必须以下列形式声明:
DWORD WINAPI ThreadProc (LPVOID lpParam) ,格式不正确将无法调用成功。
//也可以直接调用void类型
//但lpStartAddress要这样通过LPTHREAD_START_ROUTINE转换如:(LPTHREAD_START_ROUTINE)MyVoid
//然后在线程声明为:
void MyVoid()
{
return;
}
lpParameter:向线程函数传递的参数,是一个指向结构的指针,不需传递参数时,为NULL。
dwCreationFlags :线程标志,可取值如下:
--------------------------------------------------------------------------------------
CREATE_SUSPENDED(0x00000004):创建一个挂起的线程,
0:表示创建后立即激活。
STACK_SIZE_PARAM_IS_A_RESERVATION(0x00010000):dwStackSize参数指定初始的保留堆栈的大小,否则,dwStackSize指定提交的大小。该标记值在Windows 2000/NT and Windows Me/98/95上不支持。
--------------------------------------------------------------------------------------
lpThreadId:保存新线程的id。
返回值:
函数成功,返回线程句柄;函数失败返回false。若不想返回线程ID,设置值为NULL。
实例:
PMYDATA pData;
pData = (PMYDATA)HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY,
sizeof(MYDATA));
if( pData == NULL )
ExitProcess(2);
// Generate unique data for each thread.
pData->val1 = i;
pData->val2 = i+100;
HANDLE hThread = CreateThread( NULL, // default security attributes
0, // use default stack size
ThreadProc, // thread function
pData, // argument to thread function
0, // use default creation flags
&dwThreadId[i]); // returns the thread identifier
// Check the return value for success.
if (hThread == NULL)
{
ExitProcess(i);
}
2、_beginthread
全部回答
- 1楼网友:末日狂欢
- 2021-12-22 22:22
#include
#define n 5
void main()
{
float data[n];
int i,j,t;
printf("请输入%d个同学的平均分数:\n",n);
for(i=0;idata[j+1])
{t=data[j];data[j]=data[j+1];data[j+1]=t;}
printf("排序后的输出是;\n");
for(i=0;i
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
推荐资讯