WEB访问C++的程序 单线程内怎么保持多个WEB访问互斥

zhuowei 2008-10-09 11:46:37
C++的程序不断循环获取WEB的访问命令,然后处理数据并返回,但要求处理数据的时候能做到互斥。
该怎么实现呢?

代码事例如下:
C++


//C++内部的操作类对象
CClsOpr cOpr;

while(1)
{
//如果获取了WEB的访问命令
if(GetWebMsg())
{
//调用C++函数实现结果
cOpr.DoSomeThing();
}
}

//C++函数
CString CClsOpr::DoSomeThing()
{
/*这个函数内部希望做到访问的互斥。
我尝试了EnterCriticalSection(&m_s) ; 但这个是单线程的,所以这个好像没有用。
然后又尝试CreateMutex 以及 WaitForMultipleObjects 好像是可以了。但好像控制的不好。

*/
//执行操作 //////////////
Do();
}



请大家看一下红色的部分。

请问采用什么样的方法比较能实现我的需要??
...全文
159 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
WinEggDrop 2008-10-11
  • 打赏
  • 举报
回复
除非你DoSomeThing();里全是异步的API,如果DoSomeThing();里是阻塞的API的话,你上面的代码结构是不可能出现两个DoSomeThing()同时被执行的.
zhuowei 2008-10-10
  • 打赏
  • 举报
回复
应该这样说:

这个C++程序获得WEB访问命令之后就类似MFC的PostMessage,扔出消息,执行DoSomeThing()函数,本身循环继续continue. DoSomeThing()可能执行时间比较长,所以会同时多次执行DoSomeThing()。 现在就是想保证DoSomeThing函数里的Do()同时只能有一个访问。
zhuowei 2008-10-10
  • 打赏
  • 举报
回复
等一下 好像是有点问题
cppwin 2008-10-10
  • 打赏
  • 举报
回复
如果是单线程,只有等 cOpr.DoSomeThing() 完成后,才会做下一次的 GetWebMsg(),
因此无需互斥.
zhoujianhei 2008-10-10
  • 打赏
  • 举报
回复
EnterCriticalSection(&m_s) ;

就可以啊,没什么特别的。

jameshooo 2008-10-09
  • 打赏
  • 举报
回复
愣是没看懂。单线程哪里需要互斥?
zhuowei 2008-10-09
  • 打赏
  • 举报
回复
上面红色显示不了 又怎么不能编辑帖子呢?

加一点说明:
因为WEB可以是多个用户同时访问的,所以可能在同一时刻多次执行DoSomeThing()函数。

但在DoSomeThing()内部执行Do()的时候又必须要求做到互斥访问。

所以就是要搞清楚如何使用互斥变量的问题,不知道MFC提供哪些函数。
书籍目录: 第1篇 Visual C#基础编程实例 实例1 C#经典程序--Hello World 实例2 C#的简单输入输出(I/O) 实例3 C#的复杂输入输出(I/O) 实例4 通信录管理与维护 实例5 文件与目录管理 实例6 用户界面上的“Hello,World!” 实例7 组件化“Welcome”程序 实例8 网络上的“Hello World” 实例9 Ref、Out与Params描述符的应用 实例10 C#自动内存管理的应用 实例11 一个有趣栈类的实现 实例12 垃圾收集器管理与应用 实例13 垃圾收集器算法控制与使用 实例14 调用栈记录异常点 实例15 使用C#异常的栈跟踪 实例16 运行期间检测变量类型 实例17 常用值类型的原型定义 实例18 打印杨辉三角形 实例19 比较学生信息 实例20 获取车辆信息 实例21 简单角色类游戏的制作 实例22 旅馆住宿登记情况表制作 实例23 长命名空间的应用 实例24 文件特征计数 实例25 文本框输入数据的验证 第2篇 Visual C#中级编程实例 实例26 窗体背景颜色动态变化 实例27 C#属性及应用 实例28 C#属性Metadata的管理与应用 实例29 使用Context属性创建CallThreshold Service 实例30 使用应用程序域 实例31 创建C#组件与客户应用程序 实例32 用OpenFileDialog类浏览或打开文件 实例33 在C#程序中获得Win32 API 实例34 从C#中调用COM组件 实例35 在C#程序中修改HTML文件标题 实例36 下载Web页面 实例37 创建多线程应用程序 实例38 多线程的多次加载 实例39 单个线程同步运行 实例40 多线程同步运行 实例41 线程Thread Relative Static跟踪与实现 实例42 线程池(ThreadPool)的应用 实例43 多线程互斥运行 实例44 多线程时钟应用程序 实例45 监视多线程 实例46 防止多线程应用程序死锁 实例47 文件同步操作与应用 实例48 在COM程序设计中使用.NET组件 实例49 文件异步操作与多处理器系统 实例50 获取网络主机IP地址 实例51 C#对话信息框的应用 实例52 在C#中快速调用Windows API 实例53 摄氏温度与华氏温度间相互转换(1) 实例54 摄氏温度与华氏温度间相互转换(2) 实例55 使用FileSystemWatcher组件监视Web服务器 实例56 由颜色名字产生对应颜色 实例57 使用索引指示器分析域名 实例58 C#版本的PingC 实例59 DNS客户程序 实例60 一个有趣的DOS实用程序 实例61 代表元基本应用 实例62 有趣的事件代表元 实例63 随机连续偶数发生事件处理 实例64 有趣的列表框窗体 实例65 数学函数应用 第3篇 Visual C#高级编程实例 实例66 文件夹中的文件列表 实例67 读写文本文件 实例68 读写二进制文件 实例69 显示系统日期与时间(1) 实例70 显示差值的日期与时间(2) 实例71 时钟发生器应用 实例72 在.NET程序设计中使用ATL 实例73 浏览Internet文件 实例74 在C#应用程序中打开浏览器 实例75 显示Internet文件信息 实例76 Puzzle游戏 实例77 MDI窗体菜单设计(1) 实例78 MDI窗体菜单设计(2) 实例79 创建一个C#编辑器 实例80 网络端口扫描器 实例81 深入WinForms-地址簿应用(1) 实例82 深入WinForms--Image Viewer应用程序(2) 实例83 开饭时间提醒器(Meal Reminder) 实例84 服务器端C#实例 实例85 数字时钟设计技术 实例86 自动编译C#程序AutoCompiler 实例87 使用C#与ASP+编写File Uploder 实例88 访问注册表中的硬件信息 实例89 设置“开始”菜单 实例90 在“新建”中添加自己的文件类型 实例91 显示Exchange软件的客户名称 实例92 读取Windows注册表信息 实例93 自定义AboutBox组件 实例94 自定义控件及应用 实例95 Java与C#混合编程的应用 实例96 C#与C++混合编程的应用 实例97 C#与VB混合编程的应用 实例98 C#组件与C#客户程序编程的应用 实例99 C#与XML联合应用XMLHelper 实例100 在C#中部署应用
这是一门linux下c++通讯架构实战课程,针对c/c++语言已经掌握的很熟并希望进一步深造以将来用c++在linux下从事网络通讯领域/网络服务器的开发和架构工作。这门课程学习难度颇高但也有着极其优渥的薪水(最少30K月薪,最高可达60-80K月薪),这门课程,会先从nginx源码的分析和讲解开始,逐步开始书写属于自己的高性能服务器框架代码,完善个人代码库,这些,将会是您日后能取得高薪的重要筹码。本课程原计划带着大家逐行写代码,但因为代码实在过于复杂和精细,带着写代码可能会造成每节课至少要4~5小时的超长时间,所以老师会在课前先写好代码,主要的时间花费在逐行讲解这些代码上,这一点望同学们周知。如果你觉得非要老师领着写代码才行的话,老师会觉得你当前可能学习本门课程会比较吃力,请不要购买本课程,以免听不懂课程并给老师差评,差评也会非常影响老师课程的销售并造成其他同学的误解。 这门课程要求您具备下面的技能:(1)对c/c++语言掌握的非常熟练,语言本身已经不是继续学习的障碍,并不要求您一定熟悉网络或者linux;(2)对网络通讯架构领域有兴趣、勇于挑战这个高难度的开发领域并期望用大量的付出换取高薪;在这门课程中,实现了一个完整的项目,其中包括通讯框架和业务逻辑框架,浓缩总结起来包括如下几点:(1)项目本身是一个极完整的多线程高并发的服务器程序;(2)按照包头包体格式正确的接收客户端发送过来的数据包, 完美解决收包时的数据粘包问题;(3)根据收到的包的不同来执行不同的业务处理逻辑;(4)把业务处理产生的结果数据包正确返回给客户端;本项目用到的主要开发技术和特色包括:(1)epoll高并发通讯技术,用到的触发模式是epoll中的水平触发模式【LT】;(2)自己写了一套线程池来处理业务逻辑,调用适当的业务逻辑处理函数处理业务并返回给客户端处理结果;(3)线程之间的同步技术包括互斥量,信号量等等;(4)连接池中连接的延迟回收技术,这是整个项目中的精华技术,极大程度上消除诸多导致服务器程序工作不稳定的因素;(5)专门处理数据发送的一整套数据发送逻辑以及对应的发送线程;(6)其他次要技术,包括信号、日志打印、fork()子进程、守护进程等等;

15,471

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 进程/线程/DLL
社区管理员
  • 进程/线程/DLL社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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