为什么无法将线程循环调用,使得奇偶交叉输出
时间:2011-11-22
来源:互联网
#include<windows.h>
#include<iostream.h>
DWORD WINAPI Thread_1_Proc(LPVOID lpParameter);
DWORD WINAPI Thread_2_Proc(LPVOID lpParameter);
//#define NULL 1
HANDLE hMutex;
int main()
{
HANDLE hThread[2];
hThread[0] = CreateThread(NULL,0,Thread_1_Proc,NULL,0,NULL);
hThread[1] = CreateThread(NULL,0,Thread_2_Proc,NULL,0,NULL);
//HANDLE thread_1=CreateThread(NULL,0,Thread_1_Proc,NULL,0,NULL);//线程1的创建及启动
//HANDLE thread_2=CreateThread(NULL,0,Thread_2_Proc,NULL,0,NULL);//线程2的创建及启动
WaitForMultipleObjects (2,hThread,1, INFINITE );
hMutex=CreateMutex(NULL,FALSE,NULL);
//ResumeThread(thread_1);
//CloseHandle(thread_1);
//Sleep(1500);
return 0;
}
DWORD WINAPI Thread_1_Proc(LPVOID lpParameter)
{
while (1)
{
//WaitForSingleObject(hMutex,INFINITE);
for (int i = 1; i <= 30; i++)
{
if (i % 2 != 0)
{
cout<<i<<" ";
}
Sleep(500); //延迟
}
ReleaseMutex(hMutex);
}
}
DWORD WINAPI Thread_2_Proc(LPVOID lpParameter){
while (1)
{
//WaitForSingleObject(hMutex,INFINITE);
for (int i = 1; i <= 30; i++)
{
if (i % 2 == 0)
{
cout<<i<<" ";
}
Sleep(500); //延迟
}
ReleaseMutex(hMutex);
}
}
#include<iostream.h>
DWORD WINAPI Thread_1_Proc(LPVOID lpParameter);
DWORD WINAPI Thread_2_Proc(LPVOID lpParameter);
//#define NULL 1
HANDLE hMutex;
int main()
{
HANDLE hThread[2];
hThread[0] = CreateThread(NULL,0,Thread_1_Proc,NULL,0,NULL);
hThread[1] = CreateThread(NULL,0,Thread_2_Proc,NULL,0,NULL);
//HANDLE thread_1=CreateThread(NULL,0,Thread_1_Proc,NULL,0,NULL);//线程1的创建及启动
//HANDLE thread_2=CreateThread(NULL,0,Thread_2_Proc,NULL,0,NULL);//线程2的创建及启动
WaitForMultipleObjects (2,hThread,1, INFINITE );
hMutex=CreateMutex(NULL,FALSE,NULL);
//ResumeThread(thread_1);
//CloseHandle(thread_1);
//Sleep(1500);
return 0;
}
DWORD WINAPI Thread_1_Proc(LPVOID lpParameter)
{
while (1)
{
//WaitForSingleObject(hMutex,INFINITE);
for (int i = 1; i <= 30; i++)
{
if (i % 2 != 0)
{
cout<<i<<" ";
}
Sleep(500); //延迟
}
ReleaseMutex(hMutex);
}
}
DWORD WINAPI Thread_2_Proc(LPVOID lpParameter){
while (1)
{
//WaitForSingleObject(hMutex,INFINITE);
for (int i = 1; i <= 30; i++)
{
if (i % 2 == 0)
{
cout<<i<<" ";
}
Sleep(500); //延迟
}
ReleaseMutex(hMutex);
}
}
作者: lzw96996 发布时间: 2011-11-22
如果想交叉输出就不应该用多线程。
作者: pengzhixi 发布时间: 2011-11-22
用Event
作者: powtxt 发布时间: 2011-11-22
进行线程同步,
//WaitForSingleObject(hMutex,INFINITE);
不要注释掉啊、、
//WaitForSingleObject(hMutex,INFINITE);
不要注释掉啊、、
作者: agoago_2009 发布时间: 2011-11-22
引用 2 楼 powtxt 的回复:
用Event
用Event
米错。你通知我,我通知你。不就交替了嘛。
作者: sonysuqin 发布时间: 2011-11-22
是否可以提供线程循环调用,使得奇偶交叉输出1到30(使用两个信号量)的代码
作者: lzw96996 发布时间: 2011-11-29
相关阅读 更多
热门阅读
-
office 2019专业增强版最新2021版激活秘钥/序列号/激活码推荐 附激活工具
阅读:74
-
如何安装mysql8.0
阅读:31
-
Word快速设置标题样式步骤详解
阅读:28
-
20+道必知必会的Vue面试题(附答案解析)
阅读:37
-
HTML如何制作表单
阅读:22
-
百词斩可以改天数吗?当然可以,4个步骤轻松修改天数!
阅读:31
-
ET文件格式和XLS格式文件之间如何转化?
阅读:24
-
react和vue的区别及优缺点是什么
阅读:121
-
支付宝人脸识别如何关闭?
阅读:21
-
腾讯微云怎么修改照片或视频备份路径?
阅读:28