C# WaitForMultipleObjects问题(线程问题)

世外涛缘 2008-09-23 10:03:10
现在主要是希望启动线程,然后利用像WaitForMultipleObjects这样的函数将线程挂起,当set一个符合的Event事件时触发线程响应。自己做了一个程序,但是在运行时出错,WaitForMultipleObjects返回值总是0xffffffff无效值,不知道为什么,希望有大虾帮助看看,下面是大概示例:

using System.Threading;
class WatchThread
{
[DllImport("kernel32.dll")]
private static extern int CreateEvent(IntPtr lpEventAttributes,
bool bManualReset,
bool bInitialState,
string lpName);

[DllImport("kernel32.dll")]
private static extern bool SetEvent(int iEvent);

[DllImport("kernel32.dll")]
private static extern uint WaitForMultipleObjects(uint nCount,
ref int[] lpHandles,
bool bWaitAll,
int dwMilliseconds);

const uint iMaxEventNum = 4;

static int[] m_iEvent = new int[4];
IntPtr pt = new IntPtr();
m_iEvent[0] = CreateEvent(pt, false, false, null);
m_iEvent[1] = CreateEvent(pt, false, false, null);
m_iEvent[2] = CreateEvent(pt, false, false, null);
m_iEvent[3] = CreateEvent(pt, false, false, null);

Thread t1 = new Thread(WaitAndProcEvent);
t1.IsBackground = true;
t1.Start();

SetEvent(m_iEvent[0]);

bool bOK = false;

while (!bOK)
{
uint uiRet = 0;
//就是这里,总是得不到正确的值
uiRet = WaitForMultipleObjects(iMaxEventNum, ref m_iEvent, false, Timeout.Infinite);
}
}
...全文
396 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
qqlpp 2008-09-23
  • 打赏
  • 举报
回复
有可能句柄中某一个被别的线程调用


跟踪一下嘛
世外涛缘 2008-09-23
  • 打赏
  • 举报
回复
非常感谢。
得到错误是:句柄无效
但是想不明白,是CreateEvent错误么?
qqlpp 2008-09-23
  • 打赏
  • 举报
回复
GetLastError()
世外涛缘 2008-09-23
  • 打赏
  • 举报
回复
怎么跟踪,使用什么工具?
能指点指点么?感激不尽。
世外涛缘 2008-09-23
  • 打赏
  • 举报
回复
谢谢关注。
用了GetLastError()得到错误码为句柄无效。
我调用的有什么问题么?

110,536

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

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