内裤里有糖吃 发表于 2020-8-9 21:05:49

线程函数的执行顺序控制

我有三个线程函数,分别是数据读取,数据处理,数据保存。可是我在测试的时候,发现线程启动之后,每次都是先进入的数据保存线程函数,再进入到数据处理线程函数,导致每次值都是空的没有保存,这种情况下如何控制线程函数的执行顺序。新人求教。谢谢大神。

巴巴鲁 发表于 2020-8-9 21:18:03

可能是在主函数里这三个函数的顺序是保存,处理,读取。而不是读取,处理,保存
不过这只是猜测,放一下代码吧

内裤里有糖吃 发表于 2020-8-9 21:32:53

巴巴鲁 发表于 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-10 10:02:54

内裤里有糖吃 发表于 2020-8-9 21:32
pGetDataThread_L = AfxBeginThread(ThreadGetDataLeft, &m_2DThreadParam_L);//开启采集线程
                                p ...

完整程序太大啦,而且不太方便,调用是按采集,处理,存储的顺序调用的。求指点。

xieglt 发表于 2020-8-10 10:07:03

本帖最后由 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);

巴巴鲁 发表于 2020-8-10 10:53:06

多线程我也不太懂
你可以看看这个:https://www.jianshu.com/p/481c01528bdb

内裤里有糖吃 发表于 2020-8-10 11:18:33

巴巴鲁 发表于 2020-8-10 10:53
多线程我也不太懂
你可以看看这个:https://www.jianshu.com/p/481c01528bdb

我查到过,这是jave的吧。0.0

内裤里有糖吃 发表于 2020-8-10 15:34:10

本帖最后由 内裤里有糖吃 于 2020-8-10 15:45 编辑

xieglt 发表于 2020-8-10 10:07
WINDOWS 的线程同步的方法很多,随便说一种吧,用Event

首先:


内裤里有糖吃 发表于 2020-8-10 15:35:43

本帖最后由 内裤里有糖吃 于 2020-8-10 15:45 编辑

内裤里有糖吃 发表于 2020-8-10 15:34
我还想请问个问题,因为经常性的设备读取的数值不对,所以我在读取线程函数里面放了一个while语句,只有 ...

是我程序写错了
页: [1]
查看完整版本: 线程函数的执行顺序控制