如何在windows系统上用c++创建多线程
在网上看了很多,不是很懂。求大神解答比如:设gotoxy可用我需要在(0,y)和(x,0)上,分别每100毫秒打印一个字符a函数1voidX(){for(intx=0;;...
在网上看了很多,不是很懂。求大神解答
比如:
设gotoxy可用
我需要在(0,y)和(x,0)上,分别每100毫秒打印一个字符a
函数1
void X(){
for(int x=0;;x++){
gotoxy(x,0);
cout<<"a";
}
函数2
void Y(){
for(int y=1;;y++){
gotoxy(0,y);
cout<<"a";
}
问题来了,
怎么让这两个函数同时进行?
求详细代码求详细注释
谢谢 展开
比如:
设gotoxy可用
我需要在(0,y)和(x,0)上,分别每100毫秒打印一个字符a
函数1
void X(){
for(int x=0;;x++){
gotoxy(x,0);
cout<<"a";
}
函数2
void Y(){
for(int y=1;;y++){
gotoxy(0,y);
cout<<"a";
}
问题来了,
怎么让这两个函数同时进行?
求详细代码求详细注释
谢谢 展开
2个回答
2015-04-03 · 知道合伙人互联网行家
关注
展开全部
DWORD WINAPI SumThread(LPVOID lp)//求和线程
{
int* sum=(int*)lp;
for(int i=1;i101;i++)
{
(*sum)+=i;
}
return 0;//线程返回
}
DWORD WINAPI MulThread(LPVOID lp)//求阶乘线程
{
int* mul=(int*)lp;
for(int i=1;i11;i++)
{
(*mul)*=i;
}
return 0;
}
DWORD WINAPI PrintThread(LPVOID lp)//打印线程
{
HANDLE handle ;
int sum=0 ;
int mul=1;
handle = CreateThread(NULL,NULL,SumThread,(LPVOID)sum,NULL,NULL);//创建求和线程
CloseHandle(handle);//关闭线程句柄
handle = CreateThread(NULL,NULL,MulThread,(LPVOID)mul,NULL,NULL);//创建求阶乘线程
CloseHandle(handle);//关闭线程句柄
printf(%d,sum);//打印和
printf(%d,mul);//打印阶乘
return 0;
}
void main()
{
HANDLE handle;
handle = CreateThread(NULL,NULL,PrintThread,NULL,NULL,NULL);
CloseHandle(handle);
}
{
int* sum=(int*)lp;
for(int i=1;i101;i++)
{
(*sum)+=i;
}
return 0;//线程返回
}
DWORD WINAPI MulThread(LPVOID lp)//求阶乘线程
{
int* mul=(int*)lp;
for(int i=1;i11;i++)
{
(*mul)*=i;
}
return 0;
}
DWORD WINAPI PrintThread(LPVOID lp)//打印线程
{
HANDLE handle ;
int sum=0 ;
int mul=1;
handle = CreateThread(NULL,NULL,SumThread,(LPVOID)sum,NULL,NULL);//创建求和线程
CloseHandle(handle);//关闭线程句柄
handle = CreateThread(NULL,NULL,MulThread,(LPVOID)mul,NULL,NULL);//创建求阶乘线程
CloseHandle(handle);//关闭线程句柄
printf(%d,sum);//打印和
printf(%d,mul);//打印阶乘
return 0;
}
void main()
{
HANDLE handle;
handle = CreateThread(NULL,NULL,PrintThread,NULL,NULL,NULL);
CloseHandle(handle);
}
展开全部
// TS2.cpp : Defines the entry point for the console application.
//
#include "stdafx.h"
#include <WINDOWS.H>
#include <PROCESS.H>
#include <IOSTREAM.H>
void gotoxy(int a, int b)
{
cout<<"gotoxy関数実行成功!!!"<<endl;
}
//线程函数X
unsigned _stdcall X(void* pArg)
{
for(int x=0;;x++)
{
gotoxy(x,0);
cout<<"a";
}
}
//线程函数Y
unsigned _stdcall Y(void* pArg)
{
for(int y=1;;y++){
gotoxy(0,y);
cout<<"a";
}
}
int main(int argc, char* argv[])
{
HANDLE hThreads[2];
unsigned threadID;
//线程创建
hThreads[0] = (HANDLE)_beginthreadex( NULL, 0, &X, NULL, 0, &threadID );
hThreads[1] = (HANDLE)_beginthreadex( NULL, 0, &Y, NULL, 0, &threadID );
//等待创建的线程执行完成后,main函数继续执行
WaitForMultipleObjectsEx(sizeof(hThreads), hThreads, FALSE, INFINITE, FALSE);
//线程资源释放
CloseHandle(hThreads[0]);
CloseHandle(hThreads[1]);
return 0;
}
更多追问追答
追问
_stdcall和两个函数的参数是必要的吗?
main函数的参数是必要的吗?
追答
main函数参数可以不要,但是线程函数参数和前面的__stdcall是必须的。
你不要参数就可以直接用上面的代码,上面代码参数传NULL进去。
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询