多线程疑问

unlist 2008-09-04 11:57:39
#include <iostream>
#include <windows.h>
int iq=0;
HANDLE hMutex;
//using namespace std;
void first_thread()
{
WaitForSingleObject(hMutex,INFINITE);
printf("2-first_thread()\n");
for (int i=1;i<=1000000000;i++)
{
if (i==1000000000)
//MessageBox(NULL,(const char *)"1000000000","提示",64);
printf("2-1000000000\n");
}
}
void main()
{
HANDLE hth[2];
DWORD ThreadID;
hMutex=CreateMutex(NULL,FALSE,NULL);
hth[0]=CreateThread(NULL,0,(LPTHREAD_START_ROUTINE) first_thread,
NULL,0,(LPDWORD)&ThreadID);
WaitForMultipleObjects(1,hth,TRUE,INFINITE);
printf("1-End Program\n");
}
// 运行打印结果为:
printf("2-first_thread()\n")
printf("2-1000000000\n")
printf("1-End Program\n")
//设计目结果是:
printf("2-first_thread()\n")
printf("1-End Program\n")
printf("2-1000000000\n")
//请指点
...全文
71 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
xqls_xqls 2008-09-04
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 Jinhao 的回复:]
#include <iostream>
#include <windows.h>
int iq=0;
HANDLE hEvent;
//using namespace std;
unsigned long __stdcall first_thread(void*)
{
SetEvent(hEvent);
printf("2-first_thread()\n");
for (int i=1;i <=1000000000;i++)
{
if (i==1000000000)
//MessageBox(NULL,(const char *)"1000000000","提示",64);
printf("2-1000000000\n");

[/Quote]
Jinhao 2008-09-04
  • 打赏
  • 举报
回复
启动线程first_thread,在first_thread执行之前,要将main停止运行
WaitForSingleObject(hEvent, INFINITE); //停止住main

然后first_thread开始运行了,就要让停止住的main继续运行
SetEvent(hEvent); //让main继续运行

最后等待线程结束
-------------------
把下面的代码换一下位置
SetEvent(hEvent);
printf("2-first_thread()\n");

然后 忘了销毁event和线程....

Jinhao 2008-09-04
  • 打赏
  • 举报
回复
#include <iostream>
#include <windows.h>
int iq=0;
HANDLE hEvent;
//using namespace std;
unsigned long __stdcall first_thread(void*)
{
SetEvent(hEvent);
printf("2-first_thread()\n");
for (int i=1;i <=1000000000;i++)
{
if (i==1000000000)
//MessageBox(NULL,(const char *)"1000000000","提示",64);
printf("2-1000000000\n");
}
}

int main()
{
HANDLE hth[2];
DWORD ThreadID;
hEvent = CreateEvent(0, 0, 0, 0);

hth[0]=CreateThread(NULL,0,(LPTHREAD_START_ROUTINE) first_thread,
NULL,0,(LPDWORD)&ThreadID);

WaitForSingleObject(hEvent, INFINITE);

printf("1-End Program\n");

WaitForMultipleObjects(1,hth,TRUE,INFINITE);

}
unlist 2008-09-04
  • 打赏
  • 举报
回复
测试ok
多谢两位

64,654

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧