neosmart pevents存在错误

在已安装win10环境中利用EasyBCD引导安装Ubuntu16.04 摘要 教程部分 1.windows硬盘分区 2.EasyBCD设置NeoGrub引导 3.Ubuhtu安装 4. 利用EasyBCD引导Ubuntu启动 参考教程 摘要 一般来说,用u盘引导安装ubuntu是最简单的方法,但是在尝试用u盘引导安装时,由于提示UEFI下安装可能导致原有系统无法启动,我windows上有用文件太多了,不敢试,所以尝试用EasyBCD引导安装,并... 阅读详情


neosmart pevents的功能是模拟Win32 Event API,方便移植。


打开WFMO宏定义以后,调用WaitForMultipleEvents,能走到函数RemoveExpiredWaitHelper。

我向作者报告了错误,作者认为调用方法不正确。

我把测试代码发给作者,作者无回应。


微软的一个开源项目WinObjC,借用了pevents的代码,并且做了改动。是否能够稳定运行,不清楚,或许只是想当作临时代码。


bool RemoveExpiredWaitHelper(neosmart_wfmo_info_t_ wait)
{
    int result = pthread_mutex_trylock(&wait.Waiter->Mutex);  /* 返回值 result 为 0, Mutex 为锁定状态. */

    if (result == EBUSY)
    {
        return false;
    }

    assert(result == 0);

    if (wait.Waiter->StillWaiting == false)
    {
        --wait.Waiter->RefCount;
        assert(wait.Waiter->RefCount >= 0);
        if (wait.Waiter->RefCount == 0)
        {
            wait.Waiter->Destroy();  /* Waiter 的成员 Mutex 在锁定状态时候,无法销毁的,这会导致泄漏。 */
            delete wait.Waiter;
        }
        else
        {
            result = pthread_mutex_unlock(&wait.Waiter->Mutex);
            assert(result == 0);
        }

        return true;
    }

    result = pthread_mutex_unlock(&wait.Waiter->Mutex);
    assert(result == 0);

    return false;
}



下面是测试代码



#include <unistd.h>
#include <pthread.h>
#include <stdio.h>
#include <string.h>

#define WFMO
#define PULSE

#include "pevents.cpp"

const int EVENTS_COUNT = 10;
const int THREADS_COUNT = 10;

static
neosmart::neosmart_event_t   sg_events[EVENTS_COUNT];

static
void *  thread_proc( void * param )
{
    int i = 0;
    int index = 0;
    int status = 0;
    
    for (i = 0; true; ++i )
    {
        index = 0;
        
        status = neosmart::WaitForMultipleEvents( sg_events, EVENTS_COUNT, false, 1, index );
        
        if (0 != status)
        {
            // printf( "[%4d]WaitForMultipleEvents status = %s \n", i, strerror(status) );
        }
    }
    
    return NULL;
}

static
pthread_t   sg_hthread[THREADS_COUNT];

static void set_events_proc( void )
{
    int i;
    
    for(;;)
    {
        // usleep( 1 * 1000 );
        
        for (i = 0; i < EVENTS_COUNT; ++i )
        {
            neosmart::SetEvent( sg_events[i] );
        }
    }
}

int main( void )
{
    int i = 0;
    int status = 0;
    
    for( i = 0; i < EVENTS_COUNT; ++i )
    {
        sg_events[i] = neosmart::CreateEvent( false, false );
    }
    
    for (i = 0; i < THREADS_COUNT; ++i )
    {
        status = pthread_create( &sg_hthread[i], NULL, thread_proc, NULL );
        
        if (0 != status)
        {
            printf( "pthread_create failed status = %d \n", status );
            goto LABEL_THREAD_FAIL;
        }
    }
    
    set_events_proc();
    
    for (i = 0; i < THREADS_COUNT; ++i )
    {
        status = pthread_join( sg_hthread[i], NULL );
        
        if (0 != status)
        {
            printf( "pthread_join failed status = %d \n", status );
        }
    }
    
LABEL_THREAD_FAIL:;

    for (i = 0; i < EVENTS_COUNT; ++i )
    {
        neosmart::DestroyEvent( sg_events[i] );
        sg_events[i] = NULL;
    }
    
    return 0;
}


C++ win开发 WaitForSingleObject函数 C++涉及到多线程时  会经常用到WINAPI WaitForSingleObject函数 百度上的说明 WaitForSingleObject函数用来检测hHandle事件的信号状态,在某一线程中调用该函数时,线程暂时挂起,如果在挂起的dwMilliseconds毫秒内,线程所等待的对象变为有信号状态,则该函数立即返回;如果超时时间已经到达dwMilliseconds毫秒,但hHandle所 阅读详情

相关推荐

pevents:在pthread之上构建的针对* nix平台的Win32事件的实现

小事 pevents是一个跨平台的低级库,旨在为POSIX系统提供WIN32事件的实现。 pevents是建立在并行线程,并提供最两者手册-和自动重置事件的功能在Windows上,最值得注意的是,包括对多个事件同时等待(点菜WaitForMultipleObjects )。 pevents还可以用作CreateEvent()和co的精简包装。 在Windows上,这意味着您可以直接在跨平台代码中使用pevent,而无需在Windows / pthreads中使用#ifdefs 。 许可证和作者身份 pevents由NeoSmart Technologies的Mahmoud Al-Qudsi < > < >开发和维护,并根据MIT开源许可证进行分发。 有关更多信息,请参考LICENSE文件。 关于事件 尽管POSIX条件变量( pthread_cond_t )和WIN32事件均提供了编

Linux 实现 Windows 的 Event 事件机制

前言 Linux 中没有 Windows 系统中的CreateEvent()、WaitEvent()、SetEvent()、ResetEvent()等函数,本文将介绍如何使用pevents替代 Linux 缺失的函数。 pevents 介绍 pevents 的简介 pevents是一个跨平台的轻量级 C++ 库,旨在为 POSIX 系统提供 WIN32 事件的实现。pevents...

SurpassLi的专栏 382

SuperMap iObjects.NET 7C网络数据集检查

在网络分析中,有时网络分析失败,在输出窗口中可以看到网络弧段数据存在错误等信息,这就说明存在一些网络规则的错误,该程序对交通网络数据集和转向表进行数据检查,将检查结果输出为excel表,从表中可以看出该网络数据集存在哪些错误,从而参考该错误对数据进行纠正

pevents 开源项目教程

pevents 开源项目教程 项目介绍 pevents 是一个用于 Windows 平台的跨平台事件处理库,它提供了一种简单的方式来创建和管理事件对象。这个库的主要目的是简化事件的创建和等待操作,使得开发者可以更容易地在多线程环境中进行同步操作。 pevents 项目的主要特点包括: 跨平台支持:虽然主要针对 Windows 平台,但代码设计考虑了跨平台性。 简单易用:提供了简洁的 API 接口...

gitblog_00002的博客 619

YOLO26算法心电图十二导联目标检测+训练好的模型+368张数据集+pyqt可视化界面.zip

附训练好的 YOLO 权重与 PyQt 可视化检测界面,页面底部含可视化效果预览,毕设/课设开箱即用。 【数据集概况】 · 检测类别(中文):[导联I(I), 导联II(II), 导联III(III), 胸导联V1(V1), 胸导联V2(V2), 胸导联V3(V3), 胸导联V4(V4), 胸导联V5(V5), 胸导联V6(V6), 加压肢体导联aVF(aVF), 加压肢体导联aVL(aVL), 加压肢体导联aVR(aVR)] · 训练集:313 张 · 验证集:37 张 · 测试集:18 张 · 总计:368 张 该数据集聚焦于临床心电图信号的精准识别与定位,其核心检测目标为标准12导联心电图中的各个独立导联波形区域,涵盖肢体导联(I、II、III)与加压肢体导联(aVR、aVL、aVF),以及胸前导联(V1至V6),适用于心电图自动分析系统中对各导联位置的快速准确标注与分类。数据采集场景真实还原了医院心电图室或急诊监护环境下的标准心电图记录纸,波形清晰、基线稳定,具有高度临床参考价值。... 【训练曲线与评估图】 【模型训练配置】 参数 | 值 模型 | yolo26n 训练轮数 | 100 epochs 输入尺寸 | 640x640 批次大小 | 24 优化器 | auto 初始学习率 | 0.01 训练设备 【关键指标汇总】 训练了 57 个 epoch,最终轮指标: 指标 | 数值 mAP50 | **0.9708** mAP50-95 | 0.6344 Precision | 0.8990 Recall | 0.9191 train/box_loss | 1.2231 train/cls_loss | 0.9703 val/box_loss | 1.2779 val/cls_loss | 0.... 使用场景:毕业设计、课程设计、深度学习入门、工业场景落地验证。

yolov5 onnx推理时报错[ONNXRuntimeError] : 2 : INVALID_ARGUMENT : Unexpected input data type.

yolov5 onnxruntime 推理报错

zjulkw的博客 1221

开源项目 neosmart/tac 指南

开源项目 neosmart/tac 指南 项目简介 本指南旨在详细介绍位于 GitHub 的 neosmart/tac 开源项目的核心要素。该项目的具体细节和最新信息,请直接访问其仓库页面。本文档将深入剖析三个关键方面:项目目录结构、启动文件介绍、以及配置文件说明,以帮助开发者和使用者更好地理解和运用此项目。 1. 项目目录结构及介绍 由于提供的参考内容并未直接关联至具体的“neosmart/ta...

gitblog_00614的博客 343

告别‘报错马拉松’:一份保姆级的Ubuntu 20.04编译OpenWrt 15.05环境配置与问题修复清单

本文提供了一份详细的Ubuntu 20.04编译OpenWrt 15.05的环境配置与问题修复指南,帮助开发者告别‘报错马拉松’。从基础环境搭建到典型报错分类与修复方案,再到高阶问题的深度修复,全面覆盖编译过程中可能遇到的各类问题,并提供自动化补丁脚本和Docker环境固化方案,确保编译过程高效顺畅。

weixin_33230433的博客 294

pevents 项目常见问题解决方案

pevents 项目常见问题解决方案 项目基础介绍 pevents 是一个跨平台的低级库,旨在为 POSIX 系统提供 WIN32 事件的实现。该项目基于 pthreads 构建,提供了 Windows 上手动和自动重置事件的大部分功能,特别是支持同时等待多个事件(类似于 WaitForMultipleObjects)。pevents 还作为 Windows 上 CreateEvent() 等的薄...

gitblog_00121的博客 843

UVM概述及uvm_component和uvm_object(一)

UVM:Universal Verification Methodology(通用验证方法学) UVM:是建立在systemverilog平台上的一个库,提供了一系列的接口,让我们能够更方便的进行验证。验证平台组成: Driver:用来把不同的激励施加给DUT; Monitor:用来检测DUT的输出; Scoreboard:专门用来比较期望值与monitor检测到的DUT输出; Refer

南国之邱 1万+

Shell编程规范及变量

文章目录一.Shell脚本1.1Shell概述1.2Shell脚本 一.Shell脚本 1.1Shell概述 Shell是Linux系统中开机自动加载的一个特殊程序,它将用户输入的指令,转换成Linux内核可以识别的语言,从而让内核执行调用硬件。 Bash是Linux系统中默认使用shell的程序,它位于/bin/bash。 1.2Shell脚本 将需要执行的命令保存到一个文件中,按照顺序执行,它不需要编译,它是解释型的 ...

夏颜的博客 3673

PEvents开源项目安装与使用指南

PEvents开源项目安装与使用指南 一、项目目录结构及介绍 PEvents是一个在GitHub上的开源项目,其仓库地址为:https://github.com/neosmart/pevents.git。该项目旨在提供一个事件处理框架,特别适合Windows平台下的应用程序开发。 PEvents/ ├── LICENSE.txt # 许可证文件,描述软件使用的许可条款。 ├── RE...

gitblog_01102的博客 436

SECS/GEM协议中的关键指令详解:从S1F1到S9F9的完整指南

本文详细解析了SECS/GEM协议中从S1F1到S9F9的关键指令,涵盖设备状态管理、控制诊断、报警处理等核心功能。通过实际案例和调试技巧,帮助开发者掌握半导体制造设备通信标准,解决SECS/GEM协议在实际工程应用中的通讯难题,提升生产线智能化水平。

weixin_26899659的博客 397

libuv tcp连接流程分析

基本流程 1.初始化libuv loop 2.初始化tcp,建立,绑定,监听 3.设置客户端连接后的回调函数 4.设置接收到客户端数据的回调函数 5.进入uv_run(loop, UV_RUN_DEFAULT)事件轮训 6.在uv__io_poll中通过io复用epoll获取到发生状态变化的socket进行处理 文章内容包括: 目录 基本流程 TCP使用d...

zouwm12的博客 1878

Camunda 7.x 系列【22】全局监听器

Camunda支持义一个全局ExecutionListener和一个全局TaskListener,会捕获流程中发生的所有事件的通知,这样可以定义一个全局的审批人检查监听器,作用于所有用户任务。

记录知识、锤炼自我 2942

【存储原理】IO超时处理 块层block-scsi层之间

【存储原理】IO超时处理 块层block-scsi层之间

sinat_37817094的博客 1024

cocos2dx 2.2.6 hitWidget->onTouchEnded(pTouch, pEvent); 异常

今天在调试控件A处于TOUCH_EVENT_BEGAN状态下的时候,控件A被删除或是主动删除,报hitWidget->onTouchEnded(pTouch, pEvent); 异常的问题。 查看源代码如下: void TouchGroup::ccTouchEnded(CCTouch *pTouch, CCEvent *pEvent) { ccArray* selectedWidget

zxl05403的专栏 852

微博scheme

微博scheme

qq_42278595的博客 318

socket 五种模型中 WSAWaitForMultipleEvents

WaitForMultipleObjects 多个内核对象被触发时,WaitForMultipleObjects选择其中序号最小的返回。而WaitForMultipleObjects它只会改变使它返回的那个内核对象的状态。 这儿又会产生一个问题,如果序号最小的那个对象频繁被触发,那么序号比它大的内核对象将得不到被处理的机会。 为了解决这一问题,可以采用双WaitForMultipleOb

有梦,有追求 5822

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

怀旧版电脑GBC模拟器

再现原版GBC掌机的界面,电脑运行连游戏界面都一样大小,很怀旧,很真实,(英文版)强烈推荐,很小的文件,很难才找到的。

supermap deskpro该弧段与子点数据集中对应结点的空间位置不匹配

使用supermap deskpro创建网络数据集后,进行路径分析报“该弧段与子点数据集中对应结点的空间位置不匹配”错: 解决办法:生成网络数据集时,将“打断容限”设置特别小,如:0.000000001即可。

随风落叶 825

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

libuv uv__io_start详解

void uv__io_start(uv_loop_t* loop, uv__io_t* w, unsigned int events) { assert(0 == (events & ~(POLLIN | POLLOUT | UV__POLLRDHUP | UV__POLLPRI))); assert(0 != events); assert(w->fd >= ...

zouwm12的博客 1031

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

ucos OSEventPendMulti 函数解析

这个函数是请求信号量,邮箱,消息队列的,但是对互斥信号量和标志不起作用。 #if ((OS_EVENT_EN) && (OS_EVENT_MULTI_EN > 0u)) INT16U OSEventPendMulti (OS_EVENT **pevents_pend,//挂起的事件组(需要请求资源) OS_EVEN...

linxi8693的博客 2526

neosmart linux 光标,重装windows系统后原有的linux系统无法进入的解决办法。

这个问题困扰了我这个小白很久。每次无奈只能又重新装一遍linux。今天经过实践,终于解决了。我的步骤是:1.用easybcd加入neosmart linux启动项:Add New Entry>linux/BSD>type选择GRUB2其他不变然后Add Entry最后点击左侧的Edit Boot Menu然后点击右下方的Save Settings2.重启后你会看到NeoSmart li...

weixin_39793576的博客 566
上一篇: 定位多线程内存越界问题实践总结
下一篇: qt中的各种workaround
thtfpcuser
博客等级 码龄20年 13粉丝 116原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值