Un1有人找!

jiang1 2000-03-16 05:06:00
请问Un1:
vb中如何获得一个事件的句柄?是否用openevent这样的api函数,如何使用?

另外vb中waitforsingleobject这个函数的用法如何,我想用它来等待一个事件的触发,直至超时为止,但我没有调试出来,请教各位的高见!!!

问候大家!

jiang1 3.16 2000
...全文
157 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
Un1 2000-03-17
  • 打赏
  • 举报
回复
噢,Sorry! 这只是很多程序中的一个片段,无法简单改写运行。

我想你可能把 Windows 中的 EventObject 和 VB 中的 Event 搞混淆了,它们是截然不同的概念。前者可认为是一个简单意义上的类似 VB 的 Type 类型,创建它后在异步操作中使用。我个人认为它等效于定时检查加DoEvents,满足条件后标记并返回。而后者是通过标准 COM 接口由内向外的一个过程调用,实际上是对象事件接口的一个方法而已。你可以通过在对象浏览器中选中“显示隐含成员”清楚地看到这一点。

我认为你把你的问题复杂化了,你可以简单地增加一个定时器,一旦时间超过十五秒,就触发自己的超时事件。另外,如果你是在用Modem编程,我建议使用RAS, 这样可以不去理会这些问题,集中精力解决你真正需要解决的问题。
jiang1 2000-03-17
  • 打赏
  • 举报
回复
可否将这个例子改一改,直接按F5键就能轻松运行!实在是 不好意思啦!帮个忙啦!太贪心了是不是???

另外想问一下:若在窗体上放一个text控件,是否可以得到text_keydown事件的句柄;
我现在做的程序中的问题我解释一下:就是电话的拨号,通话和挂机.为了保持通话一定的时间,比如15秒,我采用windows api函数sleep(15000),不过这样的话,若在sleep的中途,对方非正常挂机,由于我还在sleep状态,就不能触发我的calldisconnect事件,因此也就不会去执行在该事件中的相应代码.这样就会产生错误.看是否除了用waitforsingleobject function外能够用别的函数或方法即可以保持15秒时间,而程序又不会处于休眠状态,即程序中的任何事件都可以响应windows消息!




jiang1 2000-03-17
  • 打赏
  • 举报
回复


你认为我把我的问题复杂化了,你认为可以简单地增加一个定时器,一旦时间超过十五秒,就触发自己的超时事件。可是我现在编写的程序一个进程中会有30-120个线程,若加定时器会出现意想不到的情况发生,请帮助想一个更好的方法!

Un1 2000-03-16
  • 打赏
  • 举报
回复
这是我的RS232编程部分源码,你参考一下:

Private Declare Function CreateEvent Lib "kernel32" Alias "CreateEventA" (ByVal lpEventAttributes As Long, ByVal bManualReset As Long, ByVal bInitialState As Long, ByVal lpName As String) As Long
Private Declare Function WaitForSingleObject Lib "kernel32" (ByVal hHandle As Long, ByVal dwMilliseconds As Long) As Long


......

Dim l As Long
l = CreateEvent(0, True, False, 0)
If l Then
olpRead.hEvent = l

l = CreateEvent(0, True, False, 0)
If l Then
olpWrite.hEvent = l

l = CreateEvent(0, True, False, 0)
If l Then
olpEvents.hEvent = l
Else
CloseHandle olpWrite.hEvent
GoTo LError1
End If
Else

LError1:
CloseHandle olpRead.hEvent
GoTo LError
End If
Else
LError:
Err.Raise vbObjectError + ERR_CREATEEVENT, MYNAME, "不能创建事件。"
End If

......


......

Private Sub ReadLoop(ByVal WaitTime As Long)
Dim l As Long

If blnRead Then
If WaitForSingleObject(olpRead.hEvent, WaitTime) <> WAIT_TIMEOUT Then
blnRead = False
l = olpRead.InternalHigh
GoTo ReadComplated
End If
Else
Static b(32766) As Byte
If ReadFile(m_CommID, b(0), m_InBufferSize, l, olpRead) Then '

ReadComplated:
If l > 0 Then
strIn = strIn & LeftB$(b(), l)

m_CommEvent = comEvReceive
RaiseEvent OnComm
End If
Else
If Err.LastDllError = ERROR_IO_PENDING Then
blnRead = True
olpRead.InternalHigh = 0
Else
m_CommEvent = comEventDCB
RaiseEvent OnComm
End If
End If
End If
End Sub

......

7,763

社区成员

发帖
与我相关
我的任务
社区描述
VB 基础类
社区管理员
  • VB基础类社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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