精易论坛

标题: WaitForSingleObject 卡死 [打印本页]

作者: 小淡    时间: 2023-3-12 23:10
标题: WaitForSingleObject 卡死
  
子程序名返回值类型公开备 注
__启动窗口_创建完毕  
计次循环首 (10, )
启动线程 (&子程序1, , )
计次循环尾 ()
子程序名返回值类型公开备 注
子程序1  
变量名类 型静态数组备 注
死循环整数型 
事件对象整数型 
结果整数型 
判断循环首 (死循环 = 0)
事件对象 = CreateEvent (0, 假, 假, “”)
如果真 (客户1.发送数据 (事件对象))
WaitForSingleObject (事件对象, 10000)
线程_进入许可区 (许可证)
结果 = 全局变量
线程_退出许可区 (许可证)
跳出循环 ()
CloseHandle (事件对象)
程序_延时 (1000)
判断循环尾 ()
调试输出 (结果)
子程序名返回值类型公开备 注
_客户1_数据到达  
线程_进入许可区 (许可证)
全局变量 = 到整数 (客户1.取回数据 ())
线程_退出许可区 (许可证)


i支持库列表   支持库注释   
EThread多线程支持库
spec特殊功能支持库




有较小几率在 WaitForSingleObject这里卡死    程序直接未响应了 是什么问题

作者: 小淡    时间: 2023-3-12 23:13
  
子程序名返回值类型公开备 注
__启动窗口_创建完毕  
计次循环首 (10, )
启动线程 (&子程序1, , )
计次循环尾 ()
子程序名返回值类型公开备 注
子程序1  
变量名类 型静态数组备 注
死循环整数型 
事件对象整数型 
结果整数型 
判断循环首 (死循环 = 0)
事件对象 = CreateEvent (0, 假, 假, “”)
哈希表.添加(事件对象)
如果真 (客户1.发送数据 (事件对象))
WaitForSingleObject (事件对象, 10000)
线程_进入许可区 (许可证)
结果=哈希表.取值(事件对象)
哈希表.删除(事件对象)
线程_退出许可区 (许可证)
跳出循环 ()
CloseHandle (事件对象)
程序_延时 (1000)
判断循环尾 ()
调试输出 (结果)
子程序名返回值类型公开备 注
_客户1_数据到达  
线程_进入许可区 (许可证)
哈希表.添加(事件对象,到整数 (客户1.取回数据 ()))
线程_退出许可区 (许可证)


i支持库列表   支持库注释   
EThread多线程支持库
spec特殊功能支持库


应该是这样吧
作者: 凌哥    时间: 2023-3-12 23:24
在 _客户1_数据到达 这个子程序的最后面增加一行:L_SetEvent (事件对象)
.版本 2

.DLL命令 L_SetEvent, 逻辑型, "kernel32.dll", "SetEvent", , 将Event事件对象设置为发信号状态
    .参数 hEvent, 整数型


补充内容 (2023-3-12 23:25):
多线程环境下,不能按你这么写...
作者: 小淡    时间: 2023-3-12 23:46
凌哥 发表于 2023-3-12 23:24
在 _客户1_数据到达 这个子程序的最后面增加一行:L_SetEvent (事件对象)
.版本 2

是的 我加了 忘记发上去  SetEvent   多线程这种服务器等待数据有啥好办法吗
作者: 凌哥    时间: 2023-3-12 23:50
小淡 发表于 2023-3-12 23:46
是的 我加了 忘记发上去  SetEvent   多线程这种服务器等待数据有啥好办法吗 ...

这个我有现成封装好的方案,只不过不免费...
作者: xuanyuanhuangdi    时间: 2024-11-3 13:58
学习中,可以。




欢迎光临 精易论坛 (https://125.confly.eu.org/) Powered by Discuz! X3.4