我目前正在开展一个项目,该项目需要我对要处理的网络数据包进行排队。我有一个最多有 25 个线程的 ThreadPool,当它们可用时处理这些数据包。但是,当将数据包数据(封装在一个类中)传递给与 ThreadPool 关联的 thread_proc 方法时,数据会被破坏。我像这样声明我的 ThreadPool 变量:
pool = new ThreadPool<Packet>((Func<Packet>)thread_proc, 25, false);
这是检查可用数据包的线程方法:
void* run()
{
while (true)
{
var packet = packets.poll();
try
{
pool.push(packet);
}
catch (ThreadError e)
{
error(e.message);
}
}
return null;
}
“数据包”是以下类的 BlockingQueue(使用互斥锁的自定义阻塞队列):
class Packet : Object
{
public unowned ClientHandler client;
public uint8[] data;
public int index;
public int size;
public Packet(ClientHandler client, uint8[] data, int index, int size)
{
this.client = client;
this.data = data;
this.index = index;
this.size = size;
}
}
上面的类是包含实际数据包数据(“数据”变量)的内容。当 Packet 实例到达 thread_proc 时,变量值都是错误的......
对于为什么会发生这种情况以及可能的解决方案的任何帮助将不胜感激。先感谢您。
〜迈克尔K。