#include <windows.h> //包含头文件
#include <stdio.h>
DWORD WINAPI myfun1( //声明线程函数
LPVOID lpParameter
);
const int stop=1; //stop 为一
const int go_on=2; //开始为2
int record=2;
static HANDLE hmutex;
int a=0; //定义全局变量a
int main()
{
HANDLE h1;
//定义线程句柄
h1=::CreateThread(NULL,0,myfun1,NULL,0,NULL);
printf("haha\n");
//创建线程1
::CloseHandle(h1);
Sleep(1000);//关闭线程句柄对象
return 0;
}
DWORD WINAPI myfun1(LPVOID lpParameter) //线程函数1
{ while(1)
{
::WaitForSingleObject(hmutex,INFINITE); //请求事件对象
//变量自加
a++; //线程睡眠1秒
printf("qiubai\n");
::ReleaseMutex(hmutex);
if(a>0)
break;//释放互斥对象句柄
}
return 0; //线程
}
c++多线程printf重复输出 运行多次,必须是多次,haha会多次输出,qiubai只输出一次,win7,vc6.0
答案:1 悬赏:30
解决时间 2021-01-30 13:42
- 提问者网友:独菊痴梦
- 2021-01-29 15:24
最佳答案
- 二级知识专家网友:一池湖水
- 2021-01-29 16:37
你应该建立两个进程, 这样才可以观察, 还有你的 haha 是在 main 函数里面, 只执行一次, 不会输出多次, qiubai, 在进程中, 但是 if (a>0) 也就是执行一次之后这个进程虽然没有关闭但是, 已经不可能进入输出的程序了.
#include <windows.h>
#include <stdio.h>
DWORD WINAPI myfun1(LPVOID lpParameter);
DWORD WINAPI myfun2(LPVOID lpParameter);
static HANDLE hmutex, hmutex2;
int main()
{
HANDLE h1;
h1=::CreateThread(NULL,0,myfun1,NULL,0,NULL);
HANDLE h2;
h2=::CreateThread(NULL,0,myfun2,NULL,0,NULL);
printf("Start:\n");
Sleep(5000);
::CloseHandle(h1);
::CloseHandle(h2);
return 0;
}
DWORD WINAPI myfun1(LPVOID lpParameter)
{
int a = 0;
while (1)
{
::WaitForSingleObject(hmutex,INFINITE);
a++;
printf("qiubai\n");
::ReleaseMutex(hmutex);
Sleep(200);
if(a > 15)
break;
}
return 0;
}
DWORD WINAPI myfun2(LPVOID lpParameter)
{
int b = 0;
while (1)
{
::WaitForSingleObject(hmutex2,INFINITE);
b++;
printf("haha\n");
::ReleaseMutex(hmutex2);
Sleep(300);
if(b > 10)
break;
}
return 0;
}
#include <windows.h>
#include <stdio.h>
DWORD WINAPI myfun1(LPVOID lpParameter);
DWORD WINAPI myfun2(LPVOID lpParameter);
static HANDLE hmutex, hmutex2;
int main()
{
HANDLE h1;
h1=::CreateThread(NULL,0,myfun1,NULL,0,NULL);
HANDLE h2;
h2=::CreateThread(NULL,0,myfun2,NULL,0,NULL);
printf("Start:\n");
Sleep(5000);
::CloseHandle(h1);
::CloseHandle(h2);
return 0;
}
DWORD WINAPI myfun1(LPVOID lpParameter)
{
int a = 0;
while (1)
{
::WaitForSingleObject(hmutex,INFINITE);
a++;
printf("qiubai\n");
::ReleaseMutex(hmutex);
Sleep(200);
if(a > 15)
break;
}
return 0;
}
DWORD WINAPI myfun2(LPVOID lpParameter)
{
int b = 0;
while (1)
{
::WaitForSingleObject(hmutex2,INFINITE);
b++;
printf("haha\n");
::ReleaseMutex(hmutex2);
Sleep(300);
if(b > 10)
break;
}
return 0;
}
我要举报
如以上问答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
推荐资讯