按键线程处理中的代码顺序执行问题

shenzhentom 2011-08-06 09:31:33
线程中想保证代码的顺序执行. 好像要加什么机制,请指导.


for (;;)
{
WaitForSingleObject (g_hInterruptEvent, dwWaitTimeout);
nEvents = BspKbdGetScanCodes2 (dwScanCode, bKeyUp);

......

for (iEvent = 0; iEvent < nEvents; ++iEvent)
{
....
DoSomething();
}
......

}


...全文
108 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
shenzhentom 2011-08-06
  • 打赏
  • 举报
回复
你的意思是:

同步和互斥是线程间的概念.

线程内部,代码是顺序执行的.
向立天 2011-08-06
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 shenzhentom 的回复:]

DoSomething() 中调用了其它的全局函数.

(DoSomething()大长了, 将它分解成多个全局函数.)

这会有影响吗?
[/Quote]
没有影响
chunyou128 2011-08-06
  • 打赏
  • 举报
回复
// 下面我要做的是依次下载每个文件,并显示下载文件的进度
// 一个文件没下载不能下载别的文件

//创建一个事件,返回一个句柄

m_hEventStop = ::CreateEvent(NULL, TRUE, FALSE, NULL);

while (true)
{
// 等待50毫秒,依照需求定,也可设为 INFINITE:
DWORD dwRet = ::WaitForSingleObject(m_hEventStop, 50);
if (WAIT_TIMEOUT != dwRet)
break;
int pros_s = GetProgress(Get_Url());

}

// ...

shenzhentom 2011-08-06
  • 打赏
  • 举报
回复
DoSomething() 中调用了其它的全局函数.

(DoSomething()大长了, 将它分解成多个全局函数.)

这会有影响吗?
向立天 2011-08-06
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 shenzhentom 的回复:]

for (;;)
{
WaitForSingleObject (g_hInterruptEvent, dwWaitTimeout);
nEvents = BspKbdGetScanCodes2 (dwScanCode, bKeyUp);

......

for (iEvent = 0; iEvent < nEvents; ++iEvent)
{
……
[/Quote]
如果你不是在DoSomething离开线程处理
那你的需求就可以实现啊
没有可能在DoSomething完成之前再次执行循环
shenzhentom 2011-08-06
  • 打赏
  • 举报
回复
for (;;)
{
WaitForSingleObject (g_hInterruptEvent, dwWaitTimeout);
nEvents = BspKbdGetScanCodes2 (dwScanCode, bKeyUp);

......

for (iEvent = 0; iEvent < nEvents; ++iEvent)
{
....
DoSomething();
}
......

}


DoSomething()是一个有很多选择的函数. 在循环中,想要执行完上一次的DoSomething(), 再执行下一次的DoSomething(). 不要冲突.

向立天 2011-08-06
  • 打赏
  • 举报
回复
你能把问题描述的清楚一些吗
看你这代码好像不需要什么机制啊
shenzhentom 2011-08-06
  • 打赏
  • 举报
回复
CreateMutex()
见习学术士 2011-08-06
  • 打赏
  • 举报
回复
线程同步吧
shenzhentom 2011-08-06
  • 打赏
  • 举报
回复
有代码范例吗?
shiyunqiang 2011-08-06
  • 打赏
  • 举报
回复
线程互斥
向立天 2011-08-06
  • 打赏
  • 举报
回复
[Quote=引用 11 楼 shenzhentom 的回复:]

你的意思是:

同步和互斥是线程间的概念.

线程内部,代码是顺序执行的.
[/Quote]
当然
不过如果你的DoSomething()和其中调用的函数在主线程或其它线程中也用到并且访问了和操作了相同的数据那就需要做控制了

16,472

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Web++
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

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