Доброе время суток.Помогите советом, несколько дней бьюсь, все перепробовал. Никак не могу разобраться в чем проблема, есть dll, которая забирает данные с устройств по TCPIP при однопоточности все норм, а при использовании многопоточности все зависает, а иногда и проскакивает и к тому же не все потоки отрабатывают... В чем может быть причина?
Код не сложный:
class Program
{
public static int Main(string[] args)
{
BBB c1 = new BBB();
BBB c2 = new BBB();
BBB c3 = new BBB();
BBB c4 = new BBB();
BBB c5 = new BBB();
Parallel.Invoke(c1.W, c2.W, c3.W, c4.W, c5.W);
Console.ReadKey();
return 0;
}
class BBB
{
libnodave.daveOSserialType fds;
libnodave.daveInterface di;
libnodave.daveConnection Connect;
private Object thisLock = new Object();
public BBB()
{
Console.WriteLine("Сокет {0}", Task.CurrentId);
fds.rfd = libnodave.openSocket(102, "192.168.4.115");
fds.wfd = fds.rfd;
if (fds.rfd > 0)
{
di = new libnodave.daveInterface(fds, "IF1", 0, libnodave.daveProtoISOTCP, libnodave.daveSpeed187k);
di.setTimeout(1000);
Connect = new libnodave.daveConnection(di, 0, 0, 2);
Connect.connectPLC();
}
else
Console.WriteLine("Ошибка в потоке {0}", Task.CurrentId);
}
public void W()
{
for (int y = 0; y < 1;y++ )
{
using (libnodave.PDU p = Connect.prepareReadRequest())
{
p.addVarToReadRequest(libnodave.daveDB, 102, 2, 3);
p.addVarToReadRequest(libnodave.daveDB, 102, 6, 3);
using (libnodave.resultSet rl = new libnodave.resultSet())
{
Connect.execReadRequest(p, rl);
for (int x = 0; x < 19; x++)
{
if (Connect.useResult(rl, x) == 0)
{
Console.WriteLine("Значение{0}|{1}:{2}|{3}|{4}", 1, x + 1, Connect.getFloat(), DateTime.Now.ToString("mm:ss.fff"), Task.CurrentId);
}
else
Console.WriteLine("Error");
}
}
}
}
}
}
}