多线程运行一会就死掉了,单步调试没问题,求高手指点,有代码
问题:有三个线程同时运行,现在发现一个线程运行一会就不走了,设了断点也不停,但是单步调试没有问题。
代码是c#写的,附上,求高手解答。
如何解决
private void WinForm_Load(object sender, EventArgs e)
{
//处理FRID部分线程
Thread Read_consumerdata = new Thread(Read_method);
Read_consumerdata.Start();
//读取数据库玩家得分线程
Thread Read_SQLscorce = new Thread(new ThreadStart(Read_SQLmethod));
Read_SQLscorce.Start();
//plc处理部分线程
Thread PLC_thread = new Thread(new ThreadStart(PLC_function));
PLC_thread.Start();
}
这地方开启三个线程。现在第三个线程运行一两次就死了。
我的第三个线程是用来一直检测一些端口,读数据和写数据,所以用了一个大的while,按理应该一直循环执行,求高手指点为什么?
private void PLC_function()
{
//计算读写循环失败次数
int Count_S_F = 0;
int Flage = Com_.Get_Flage();//1表示PC是主站,0表示PLC是主站
//plc地址
Byte addr_plc = Com_.Get_addr_plc();
//plc读写地址
Int16 addr_ = Com_.Get_addr_r();
//存储读写数据
byte[] data_plc_w = new byte[len*2];
byte[] data_plc_r = new byte[len*2];
//串口函数
PLC_.Com_Prepare();
if (Flage == 1)//pc---->plc
{
while (true)
{
//判断是否返回空数组
int len_count = 0;
//读PLC数据
data_plc_r = PLC_.PC_R_fuction(addr_plc, addr_, len);
//判断是否为空
// for (int i = 0; i < data_plc.Length; i++)
// if (data_plc[i] == 0x00)
// len_count++;
// if (len_count != data_plc.Length)
// {
//sql写
for (int i = 0; i < len; i++)//byte转成int16
{
Int16 s = System.BitConverter.ToInt16(data_plc_r, i * 2);
UpData_PLC(s, i);
}
//sql读
// for (int j = len,n=0; j < len *2; j++)
// {
// string id = "select * from PLC_DATA where ID=" + j;
// Int16 s = GetData_plc(id);
// byte[] ss = new byte[2];
// ss = System.BitConverter.GetBytes(s);
// data_plc_w[n] = ss[1];
// data_plc_w[n + 1] = ss[0];
// n = n + 2;
//向plc写入成功
PLC_.PC_W_fuction(data_plc_w, addr_plc, addr_);
//else
// continue;
}
}
else//plc----->pc
{
while(true)
{
}
}
} --------------------编程问答-------------------- 我地个妈呀,你这。。。 --------------------编程问答-------------------- 完全没有看到线程同步的逻辑。 --------------------编程问答--------------------
补充:.NET技术 , C#