2、还有一个问题就是我不知道我要用到多少子线程,不过在程序运行的时候就知道有多少组数据了,一组数据对应一个线程,我该怎么写?
其中一个子线程例子如下:
DWORD WINAPI Fun1Proc(LPVOID lpParameter)
{
WaitForSingleObject(hMutex,INFINITE);
while(TRUE)
{
char ch[100];
CTestDlg *pDlg=(CTestDlg*)lpParameter;
CByteArray Array;
const int count=3;
BYTE buf[count];
Array.RemoveAll();
Array.SetSize(count);
if(BST_UNCHECKED==pDlg->IsDlgButtonChecked(IDC_CHECK))
{
Sleep(waittime*1000);
while (pos11==pos1)
{
Sleep(100);
buf[0]=0xFF;
buf[1]=0x23;
buf[2]=0x11;
for(int i=0;i<count;i++)
Array.SetAt(i,buf[i]);
pDlg->m_mscomm.put_OutBufferCount(0);
pDlg->m_mscomm.put_Output(COleVariant(Array));//这里就一运行就一直中断
}
}
break;
}
ReleaseMutex(hMutex);
return 0;
}
11 个解决方案
#1
希望大家多多帮忙。。。。
#2
1.你线程犯了一个错误,mscomm控件属性界面相关的东西,而你在线程中直接操作界面,这是不安全的,改成在线程中发消息到主界面,由主界面操作mscomm控件。
2.串口通讯据我所知,应该设备是独占式的,不能两个线程同时打开同一个串口吧?如果由主程序打开串口,子线程通过串口句柄同时操作应该没问题。
2.串口通讯据我所知,应该设备是独占式的,不能两个线程同时打开同一个串口吧?如果由主程序打开串口,子线程通过串口句柄同时操作应该没问题。
#3
支持楼上。。
#4
串口是独占设备,不用同时读写!
使用 多线程没什么用
使用 多线程没什么用
#5
多线程操作串口?
你同时操作几个串口
如果是一个那也不可能并行啊
串口有不是并口
既然不能并行那线程一个就够了啊
你同时操作几个串口
如果是一个那也不可能并行啊
串口有不是并口
既然不能并行那线程一个就够了啊
#6
项目是要求是这样的,要一段一段的调试一个机械臂,先运动一段满足要求停下,然后接着运行下一段。在程序中我加了一个while 循环,要是不用多线程(互斥),会卡死,所以我想一个线程一个线程的运行。
#7
项目是要求是这样的,要一段一段的调试一个机械臂,先运动一段满足要求停下,然后接着运行下一段。在程序中我加了一个while 循环,要是不用多线程(互斥),会卡死,所以我想一个线程一个线程的运行。
#8
一段一段和一个线程一个线程没关系吧
多线程是为了解决并发
也就是如果你要同时进行应该考虑多线程
你说不用多线程会卡死
我觉得卡死和多线程没关系
而且你现在用多线程不也是卡死么
所以还是你程序结构不合理
多线程是为了解决并发
也就是如果你要同时进行应该考虑多线程
你说不用多线程会卡死
我觉得卡死和多线程没关系
而且你现在用多线程不也是卡死么
所以还是你程序结构不合理
#9
谢谢大家,我新手一个,要学习的地方还很多
#10
一段一段和一个线程一个线程没关系吧
多线程操作串口?
你同时操作几个串口
如果是一个那也不可能并行啊
串口有不是并口
既然不能并行那线程一个就够了啊
项目是要求是这样的,要一段一段的调试一个机械臂,先运动一段满足要求停下,然后接着运行下一段。在程序中我加了一个while 循环,要是不用多线程(互斥),会卡死,所以我想一个线程一个线程的运行。
多线程是为了解决并发
也就是如果你要同时进行应该考虑多线程
你说不用多线程会卡死
我觉得卡死和多线程没关系
而且你现在用多线程不也是卡死么
所以还是你程序结构不合理
在问一个问题,子对话框怎么实现用串口发送数据?
#11
串口发送数据和是不是子对话框没关系吧
直接api操作的话就是拿到句柄WriteFile啊
在程序的任何位置都一样
直接api操作的话就是拿到句柄WriteFile啊
在程序的任何位置都一样
#1
希望大家多多帮忙。。。。
#2
1.你线程犯了一个错误,mscomm控件属性界面相关的东西,而你在线程中直接操作界面,这是不安全的,改成在线程中发消息到主界面,由主界面操作mscomm控件。
2.串口通讯据我所知,应该设备是独占式的,不能两个线程同时打开同一个串口吧?如果由主程序打开串口,子线程通过串口句柄同时操作应该没问题。
2.串口通讯据我所知,应该设备是独占式的,不能两个线程同时打开同一个串口吧?如果由主程序打开串口,子线程通过串口句柄同时操作应该没问题。
#3
支持楼上。。
#4
串口是独占设备,不用同时读写!
使用 多线程没什么用
使用 多线程没什么用
#5
多线程操作串口?
你同时操作几个串口
如果是一个那也不可能并行啊
串口有不是并口
既然不能并行那线程一个就够了啊
你同时操作几个串口
如果是一个那也不可能并行啊
串口有不是并口
既然不能并行那线程一个就够了啊
#6
1.你线程犯了一个错误,mscomm控件属性界面相关的东西,而你在线程中直接操作界面,这是不安全的,改成在线程中发消息到主界面,由主界面操作mscomm控件。
2.串口通讯据我所知,应该设备是独占式的,不能两个线程同时打开同一个串口吧?如果由主程序打开串口,子线程通过串口句柄同时操作应该没问题。
项目是要求是这样的,要一段一段的调试一个机械臂,先运动一段满足要求停下,然后接着运行下一段。在程序中我加了一个while 循环,要是不用多线程(互斥),会卡死,所以我想一个线程一个线程的运行。
#7
多线程操作串口?
你同时操作几个串口
如果是一个那也不可能并行啊
串口有不是并口
既然不能并行那线程一个就够了啊
项目是要求是这样的,要一段一段的调试一个机械臂,先运动一段满足要求停下,然后接着运行下一段。在程序中我加了一个while 循环,要是不用多线程(互斥),会卡死,所以我想一个线程一个线程的运行。
#8
多线程操作串口?
你同时操作几个串口
如果是一个那也不可能并行啊
串口有不是并口
既然不能并行那线程一个就够了啊
项目是要求是这样的,要一段一段的调试一个机械臂,先运动一段满足要求停下,然后接着运行下一段。在程序中我加了一个while 循环,要是不用多线程(互斥),会卡死,所以我想一个线程一个线程的运行。
多线程是为了解决并发
也就是如果你要同时进行应该考虑多线程
你说不用多线程会卡死
我觉得卡死和多线程没关系
而且你现在用多线程不也是卡死么
所以还是你程序结构不合理
#9
谢谢大家,我新手一个,要学习的地方还很多
#10
一段一段和一个线程一个线程没关系吧
多线程操作串口?
你同时操作几个串口
如果是一个那也不可能并行啊
串口有不是并口
既然不能并行那线程一个就够了啊
项目是要求是这样的,要一段一段的调试一个机械臂,先运动一段满足要求停下,然后接着运行下一段。在程序中我加了一个while 循环,要是不用多线程(互斥),会卡死,所以我想一个线程一个线程的运行。
多线程是为了解决并发
也就是如果你要同时进行应该考虑多线程
你说不用多线程会卡死
我觉得卡死和多线程没关系
而且你现在用多线程不也是卡死么
所以还是你程序结构不合理
在问一个问题,子对话框怎么实现用串口发送数据?
#11
串口发送数据和是不是子对话框没关系吧
直接api操作的话就是拿到句柄WriteFile啊
在程序的任何位置都一样
直接api操作的话就是拿到句柄WriteFile啊
在程序的任何位置都一样