免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 5227 | 回复: 0
打印 上一主题 下一主题

关于将 WaitForMultipleObjects 转变到 Linux 下面的几个问题。。。 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2010-08-22 18:40 |只看该作者 |倒序浏览
本帖最后由 mrguo 于 2010-08-22 20:18 编辑

有一段比较权威的例子,说的是将widows下的 WaitForMultipleObjects 如何转到 LINUX下面(附下),

不过,在下有点愚钝,有几个地方没有看明白:

第一个问题是:
  WaitForMultipleObjects是有返回值的,通过返回值,可以知道哪个对象被触发了,
  但是,根据下面的例子,在LINUX下面应该怎样处理呢?

第二个问题是:
  为什么在子线程中都要一个sem_wait(&semOne)或者sem_wait(&semTwo)的语句?
  目的是什么?必须放在线程程序的第一行吗?

希望各位高手能指点一下,多谢啦!!!

============================
附:将 WaitForMultipleObjects 转变到 LINUX 下

Windows example for any single object to be signaled
HANDLE     hEvents[2];
DWORD     i, dwRetCode;

// Create two event objects.

for (i = 0; i < 2; i++)
{
    hEvents = CreateEvent(
        NULL,   // no security attributes
        FALSE,  // auto-reset event object
        FALSE,  // initial state is nonsignaled
        NULL);  // unnamed object

}

// The creating thread waits for other threads or processes
// to signal the event objects.

dwRetCode  = WaitForMultipleObjects(
                       2,           // number of objects in array
                       hEvents,     // array of objects
                       FALSE,       // wait for any
                       INFINITE);   // indefinite wait

// Return value indicates which event is signaled.

switch (dwEvent)
{
    // hEvent[0] was signaled.
    case WAIT_OBJECT_0 + 0:
        // Perform tasks required by this event.
        break;

    // hEvent[1] was signaled.
    case WAIT_OBJECT_0 + 1:
        // Perform tasks required by this event.
        break;

    // Return value is invalid.
    default:
        // probe for error
}


Linux equivalent code using POSIX
// Semaphore
sem_t semOne  ;
sem_t semTwo  ;
sem_t semMain ;

// Main thread
sem_init(semOne,0,0) ;
sem_init(semTwo,0,0) ;
sem_init(semMain,0,0) ;

// create 2 threads each one waits on one semaphore
// if signaled signals the main semaphore

sem_wait(&semMain);


// Thread 1
sem_wait(&semOne);
sem_post(&semMain);


// Thread 2
sem_wait(&semTwo);
sem_post(&semMain);
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP