社区
进程/线程/DLL
帖子详情
孙鑫著作《VC++深入详解》第15章主线程暂停执行的问题
haiyangwen008
2009-09-09 10:38:39
《VC++深入详解》第15章的例15-1的程序中,在565页说要在main函数最后添加Sleep(10),操作系统才会选择新创建的Fun1Proc线程函数来执行;但在583页的例15-12的程序中没有看到Sleep( )这个函数,也没有类似让主线程暂停执行的语句,这时主线程执行完毕后,进程不就退出了吗,以后怎么还能进入RecvProc这个线程函数呢?不明白!
...全文
286
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++
15
(1)多
线程
与命名互斥
本文详细介绍了
C++
中进程、
线程
的概念,如何创建多
线程
,以及通过命名互斥来确保应用程序仅运行一个实例。包括创建
线程
的函数、
线程
入口函数、
暂停
线程
的Sleep函数、互斥对象的创建、请求与释放方法,以及通过互斥对象防止多实例运行的实现。
基于 V
C++
与机器人 SDK 的工业多轴示教器软件设计与实现
本文基于V
C++
MFC框架与fjrobotSDK,设计并实现了一套8轴工业机器人示教器软件。重点解决多轴实时数据采集(≤10ms周期)、双缓冲界面防闪烁、SDK多
线程
通讯管理、GDI资源泄漏防护及多重安全互锁(急停/使能/权限/故障)等工业级工程
问题
。软件支持点动控制、原点回归、点位管理、故障报警与断线重连,已在实体产线稳定运行72小时,内存占用<30MB,适配低配工控机。
15
:46 2009-8-2 sql2005客户端装不上,碎片不能整理,createthread
本文档记录了 SQL Server 2005 的安装过程中遇到的
问题
及解决办法,同时介绍了
C++
中多
线程
编程的基础知识与常见
问题
,包括
线程
创建、
线程
句柄管理和
线程
同步等。
【水下机器人建模】基于QLearning自适应强化学习PID控制器在AUV中的应用研究(Matlab代码实现)
内容概要:本文研究了基于Q-Learning自适应强化学习的PID控制器在自主水下航行器(AUV)运动控制中的应用,旨在提升其在复杂海洋环境下的控制性能。通过建立AUV的动力学模型,将Q-Learning算法与传统PID控制相结合,实现控制器参数的在线自适应优化,有效增强了系统的响应速度、稳定性和抗干扰能力。研究采用Matlab进行仿真验证,结果表明该方法在轨迹跟踪与姿态控制方面具有优越表现,为水下机器人智能控制提供了可行的技术路径与理论支持。; 适合人群:具备自动控制理论、强化学习或水下机器人建模背景,从事相关科研工作的研究人员、高校研究生及工程技术开发者。; 使用场景及目标:①应用于高精度、强鲁棒性的水下机器人运动控制系统设计;②开展智能PID控制器在非线性、时变系统中的参数自整定研究;③作为强化学习在复杂工业控制场景中落地的典型案例参考,推动算法与工程实践融合。; 阅读建议:建议结合提供的Matlab代码进行仿真实验,重点剖析Q-Learning与PID融合的架构设计、奖励函数设定及参数收敛过程,可进一步拓展至与其他智能优化算法(如DQN、Actor-Critic)的对比研究,深化对自适应控制机制的理解。
matlab多元非线性回归教程
已经博主授权,源码转载自 https://pan.quark.cn/s/a4b39357ea24 Matlab 被视为一种功能卓越的编程平台,特别是在数值运算和数据分析方面展现出广泛的应用价值。在应对多元非线性回归的挑战时,Matlab 拥备多种工具和函数,支持用户对复杂的数据进行构建模型和适配。本指南将重点阐释在 Matlab 环境下如何
执行
多元非线性回归分析。 我们需要掌握三种关键的回归指令: 1. `polyfit(x,y,n)`:此函数适用于拟合一元幂函数,能够导出一个多项式模型。例如,若知晓数据呈现二次函数形态,可选择`n=2`来适配一个二次曲线。 2. `regress(y,x)`:这是一个多元线性回归指令,能够处理多个自变量对因变量的影响。即便数据并非完全呈现线性特征,该函数也能提供一个线性近似。 3. `nlinfit(x,y,’fun’,beta0)`:这是最为通用的非线性回归指令,适用于适配任何类型的函数,无论是一元或多元,前提是用户能够定义函数形式(`fun`参数)。 回归分析的核心在于寻找一组最优的系数,使得模型能够最恰当地描述数据。这通常涉及选择一个合适的函数形态,随后通过最小化误差平方和来估算系数。在Matlab中,`regress`指令主要用于处理线性模型,而`nlinfit`则处理更为复杂的非线性模型。 对于多元线性回归模型,我们可以用如下形式进行表述: \[ y = \beta_0 + \beta_1x_1 + \beta_2x_2 + \cdots + \beta_px_p + \epsilon \] 其中,\( y \)是因变量,\( x_1, x_2, \ldots, x_p \)是自变量,\( \beta_0, \beta_1, ...
进程/线程/DLL
15,465
社区成员
49,169
社区内容
发帖
与我相关
我的任务
进程/线程/DLL
VC/MFC 进程/线程/DLL
复制链接
扫一扫
分享
社区描述
VC/MFC 进程/线程/DLL
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章