线程函数的执行顺序控制
我有三个线程函数,分别是数据读取,数据处理,数据保存。可是我在测试的时候,发现线程启动之后,每次都是先进入的数据保存线程函数,再进入到数据处理线程函数,导致每次值都是空的没有保存,这种情况下如何控制线程函数的执行顺序。新人求教。谢谢大神。 可能是在主函数里这三个函数的顺序是保存,处理,读取。而不是读取,处理,保存不过这只是猜测,放一下代码吧 巴巴鲁 发表于 2020-8-9 21:18
可能是在主函数里这三个函数的顺序是保存,处理,读取。而不是读取,处理,保存
不过这只是猜测,放一下代 ...
pGetDataThread_L = AfxBeginThread(ThreadGetDataLeft, &m_2DThreadParam_L);//开启采集线程
pDealThread_L = AfxBeginThread(ThreadDealLeft, &m_2DThreadParam_L); //开启处理线程
pStDataThread_L = AfxBeginThread(ThreadStData_L, &m_2DThreadParam_L); //数据保存线程的调用 内裤里有糖吃 发表于 2020-8-9 21:32
pGetDataThread_L = AfxBeginThread(ThreadGetDataLeft, &m_2DThreadParam_L);//开启采集线程
p ...
完整程序太大啦,而且不太方便,调用是按采集,处理,存储的顺序调用的。求指点。 本帖最后由 xieglt 于 2020-8-10 10:09 编辑
WINDOWS 的线程同步的方法很多,随便说一种吧,用Event
首先:
定义全局的 Event并初始化
//1、定义全局的Event
HANDLEg_process = NULL;
HANDLEg_store = NULL;
//2、主线程里对Event进行初始化
g_process = CreateEvent(NULL,FALSE,FALSE,NULL);
g_store = CreateEvent(NULL,FALSE,FALSE,NULL);
//3、数据采集线程
//采集数据
...
//数据采集完毕
//设置g_process状态,通知数据处理线程可以进行数据处理了
SetEvent(g_process);
//4、数据处理线程
//等待数据处理信号(g_process)
//无限等待,等待到信号则线程继续,你这样的处理逻辑无限等待就可以了
WaitForSingleObject(g_process,INFINITE);
//数据处理
...
//数据处理完毕
//设置数据存储信号
SetEvent(g_store);
//5、数据存储线程
//无限等待,等待到信号则线程继续
WaitForSingleObject(g_store,INFINITE);
//数据存储
...
//数据存储完毕
//6、主线程里释放 Event对象
CloseHandle(g_process);
CloseHandle(g_store);
多线程我也不太懂
你可以看看这个:https://www.jianshu.com/p/481c01528bdb 巴巴鲁 发表于 2020-8-10 10:53
多线程我也不太懂
你可以看看这个:https://www.jianshu.com/p/481c01528bdb
我查到过,这是jave的吧。0.0 本帖最后由 内裤里有糖吃 于 2020-8-10 15:45 编辑
xieglt 发表于 2020-8-10 10:07
WINDOWS 的线程同步的方法很多,随便说一种吧,用Event
首先:
本帖最后由 内裤里有糖吃 于 2020-8-10 15:45 编辑
内裤里有糖吃 发表于 2020-8-10 15:34
我还想请问个问题,因为经常性的设备读取的数值不对,所以我在读取线程函数里面放了一个while语句,只有 ...
是我程序写错了
页:
[1]