社区
进程/线程/DLL
帖子详情
孙鑫著作《VC++深入详解》第15章主线程暂停执行的问题
haiyangwen008
2009-09-09 10:38:39
《VC++深入详解》第15章的例15-1的程序中,在565页说要在main函数最后添加Sleep(10),操作系统才会选择新创建的Fun1Proc线程函数来执行;但在583页的例15-12的程序中没有看到Sleep( )这个函数,也没有类似让主线程暂停执行的语句,这时主线程执行完毕后,进程不就退出了吗,以后怎么还能进入RecvProc这个线程函数呢?不明白!
...全文
236
8
打赏
收藏
孙鑫著作《VC++深入详解》第15章主线程暂停执行的问题
《VC++深入详解》第15章的例15-1的程序中,在565页说要在main函数最后添加Sleep(10),操作系统才会选择新创建的Fun1Proc线程函数来执行;但在583页的例15-12的程序中没有看到Sleep( )这个函数,也没有类似让主线程暂停执行的语句,这时主线程执行完毕后,进程不就退出了吗,以后怎么还能进入RecvProc这个线程函数呢?不明白!
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
8 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
大湾区小明
2010-05-22
打赏
举报
回复
为什么我们电脑上可以运行多个实例,而不是只有一个实例?我用的是vc++6.0,是否要设置哪里?
tutu08
2009-09-14
打赏
举报
回复
应该是这个吧?
#include <windows.h>
#include <iostream.h>
DWORD WINAPI Fun1Proc(
LPVOID lpParameter // thread data
);
DWORD WINAPI Fun2Proc(
LPVOID lpParameter // thread data
);
int index=0;
int tickets=100;
HANDLE hMutex;互斥对象的句柄
void main()
{
HANDLE hThread1;
HANDLE hThread2;
hThread1=CreateThread(NULL,0,Fun1Proc,NULL,0,NULL);创建线程1
hThread2=CreateThread(NULL,0,Fun2Proc,NULL,0,NULL);创建线程2
CloseHandle(hThread1);关闭线程的句柄,为什么要关闭?它将线程的使用计数减1
CloseHandle(hThread2);这样当线程结束时,线程内核对象被释放,否则只有当进程结束,才释放线程的内核对象
/*while(index++<1000)
cout<<"main thread is running"<<endl;*/
//hMutex=CreateMutex(NULL,TRUE,NULL);将第二个参数设为true后,互斥对象的计数加1
hMutex=CreateMutex(NULL,TRUE,"tickets");此段代码可以让系统只一份实例在运行!
if(hMutex)
{
if(ERROR_ALREADY_EXISTS==GetLastError())
{
cout<<"only instance can run!"<<endl;
return;
}
}
WaitForSingleObject(hMutex,INFINITE);此代码也将コ舛韵蟮募剖?
ReleaseMutex(hMutex);所以要释放两次互斥对象
ReleaseMutex(hMutex);
Sleep(4000);睡眠4000毫秒
// Sleep(10);
}
DWORD WINAPI Fun1Proc(
LPVOID lpParameter // thread data
)
{
/*while(index++<1000)
cout<<"thread1 is running"<<endl;*/
/*while(TRUE)
{
//ReleaseMutex(hMutex);
WaitForSingleObject(hMutex,INFINITE);等待互斥对象的到来,到来后将互斥对象的计数加1
if(tickets>0)
{
Sleep(1);
cout<<"thread1 sell ticket : "<<tickets--<<endl;
}
else
break;
ReleaseMutex(hMutex);释放互斥对象,将其计数减1,这样可以保证,这两句话之间 的代码!的执行连续性!
}*/
WaitForSingleObject(hMutex,INFINITE);
cout<<"thread1 is running"<<endl;
return 0;
}
DWORD WINAPI Fun2Proc(
LPVOID lpParameter // thread data
)
{
/*while(TRUE)
{
//ReleaseMutex(hMutex);
WaitForSingleObject(hMutex,INFINITE);
if(tickets>0)
{
Sleep(1);
cout<<"thread2 sell ticket : "<<tickets--<<endl;
}
else
break;
ReleaseMutex(hMutex);
}*/
WaitForSingleObject(hMutex,INFINITE);
cout<<"thread2 is running"<<endl;
return 0;
}
f515sf1sd15fsd1f56sd
2009-09-14
打赏
举报
回复
教程没有错 你把代码贴上看看
lzqzml
2009-09-14
打赏
举报
回复
那本书我看过,至少15章的代码没有错,你再往后看几页他的解释
gtsfreer
2009-09-11
打赏
举报
回复
楼主给点代码,不是谁手中都有本孙鑫的VC书的啊
nodiebirdcomeback
2009-09-11
打赏
举报
回复
无论主线程是否sleep或者处于等待状态,其创建的线程只要是初期创建的时候没有指定挂起,那么这个线程 进入了执行状态,如果主线程要是退出了,这意味着进程结束了,那么它所创建的线程也就被强制退出。使主线程序处于运行状态可以使用消息循环,也可以让它空转,也可以使用WaitForXXXX系列函数使主线程进入等待状态。
zoulie
2009-09-11
打赏
举报
回复
贴下代码看看
孙鑫
V
C++
深入
详解
书中源码
孙鑫
V
C++
深入
详解
书中源码
V
C++
深入
详解
(课件+源码)
《V
C++
深入
详解
》主要从程序内部运行的机制和MFC程序的组织脉络入手,使读者在学习V
C++
编程知识时,既能够知其然,又能知其所以然,从而帮助读者从根本上理解和掌握Windows的程序设计。另外,《V
C++
深入
详解
》还贯穿...
V
C++
深入
详解
PDF教程及示例代码.rar
《V
C++
深入
详解
》是电子工业出版社出版的书籍,作者是
孙鑫
、余安萍。本书主要从程序内部运行的机制和MFC程序的组织脉络入手,使读者在学习V
C++
编程知识时,既能够知其然,又能知其所以然,从而帮助读者从根本上理解...
V
C++
深入
详解
.rar
介绍了Windows程序运行的内部机制,剖析了MFC框架的运行机制
V
C++
深入
详解
源码
学习V
C++
的好资源,V
C++
的源码,对于初步学习,或者教师都会有很好的用处
进程/线程/DLL
15,471
社区成员
49,182
社区内容
发帖
与我相关
我的任务
进程/线程/DLL
VC/MFC 进程/线程/DLL
复制链接
扫一扫
分享
社区描述
VC/MFC 进程/线程/DLL
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章