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();
}



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

请问采用什么样的方法比较能实现我的需要??
...全文
156 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提供哪些函数。

15,472

社区成员

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

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