Linux 模拟 windows 下 event (事件)

ccsu_dog 2014-02-20 09:54:33
需要在linux下使用windows下的event的功能。
需要的函数:
1. setevent()
2. getevent()
3. resetevent():event设置为手动置位模式

在windows下使用event很ok,但是在linux下 我使用信号量模拟过 但是效果不是很好 不知道各位有没有好的想法? 用C、C++
...全文
234 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
ccsu_dog 2014-02-24
  • 打赏
  • 举报
回复
引用 2 楼 feiyinzilgd 的回复:
能稍微把应用场景讲下么?这样比较好分析问题。
使用条件变量加一个开关变量 模拟win下的event 和 使用信号量模拟加一个开关变量 去模拟 到底哪一个的效率会更高呢? 我认为条件变量需要加锁解锁 应该没有信号量快 但是也看到说信号量既要做到互斥又要做到同步 开销和复杂性会更大 而且没有设计出很好的测试环境 很难测出其中的差别 有没有理论上能够说明的呢?
ccsu_dog 2014-02-20
  • 打赏
  • 举报
回复

void setSignal()
{
    sem_trywait(&signal_);
    sem_post(&signal_);
    return 0;
}

void waitSignal()
{
    sem_wait(&signal_);
    sem_post(&signal_);
    return 0;
}

void resetSignal()
{
    while (0 == sem_trywait(&signal_));
/// sem_trywait(&signal_) 如果调用之前信号量大于0 返回0  如果调用之前信号量等于0 返回EAGAIN
    return 0;
}
ccsu_dog 2014-02-20
  • 打赏
  • 举报
回复
1. 收到消息过来 发出信号 但是没有消息个数 只做出有消息来的信号 2. 处理线程 在没有消息时 挂起等待 得到信号后 去队列取数据处理 3. 当处理线程在队列中取不到数据之后 线程将信号置位 随之自己挂起 这样说可否?
谭海燕 2014-02-20
  • 打赏
  • 举报
回复
能稍微把应用场景讲下么?这样比较好分析问题。

23,125

社区成员

发帖
与我相关
我的任务
社区描述
Linux/Unix社区 应用程序开发区
社区管理员
  • 应用程序开发区社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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