+ -
当前位置:首页 → 问答吧 → 为什么无法将线程循环调用,使得奇偶交叉输出

为什么无法将线程循环调用,使得奇偶交叉输出

时间: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);
  }
}

作者: lzw96996   发布时间: 2011-11-22

如果想交叉输出就不应该用多线程。

作者: pengzhixi   发布时间: 2011-11-22

用Event

作者: powtxt   发布时间: 2011-11-22

进行线程同步,
  //WaitForSingleObject(hMutex,INFINITE);
不要注释掉啊、、

作者: agoago_2009   发布时间: 2011-11-22

引用 2 楼 powtxt 的回复:

用Event


米错。你通知我,我通知你。不就交替了嘛。

作者: sonysuqin   发布时间: 2011-11-22

是否可以提供线程循环调用,使得奇偶交叉输出1到30(使用两个信号量)的代码

作者: lzw96996   发布时间: 2011-11-29