C++线程更新变量问题

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C++线程更新变量问题相关的知识,希望对你有一定的参考价值。

C++中如何写一个线程监听某全局变量,当变量值发生变化的时候运行线程函数,或者每隔一段时间刷新变量,运线程函数
问题在于线程函数需要接收变量值,然后在线程内修改刷新一个对象的成员变量,接着调用类的函数(用到更新后的变量)。但是我查到线程函数都是必须写成DWORD WINAPI ThreadPro(LPVOID lp)的形式,不知道应该如何传入参数(或者不用传入参数线程内可以自己每隔一段时间刷新执行一次?)。
补充:这个程序要作为主程序的一个子线程,主程序启动后它在后台不断接收更新变量然后执行线程内的函数处理后不断输出的

总感觉你的描述有点绕。
首先,你要多个线程使用一个变量,将其声明为volatile类型。
其次,你这什么开发工具?工程什么类型?
再次,你要“监听”某全局变量,可以在线程中使用循环方式
while(退出线程标志)

if(变量值值改变了)

调用你的函数

Sleep(10);//腾出一点空闲

“或者每隔一段时间刷新变量,运线程函数”这句不明白你是要怎么做。
最后,线程传参可以传入你需要的所有参数,具体的可以QQ(私信发送你的Q给我即可)上再商量。
如果线程函数是类成员,要声明为static成员。
参考技术A 可从C#传递data指针给C++ DLL;

DLL 需传出char *类型
[DllImport(“MyTest.dll")]
// 传出值
public static extern int test(StringBuilder data);

//C++ DLL中申明
char* data = NULL;
extern “C” __declspec(dllexport) int WINAPI setdata(char * buff)

//改变data
data = buff;
return 0;
参考技术B

你的具体逻辑是什么我不管 对于线程 你完全可以传入一个结构


struct ThreadParam
  SomeClass * pObject;
  SomeType  * pVarBeingWatched;

ThreadParam stParam;
CreateThread(..., ThreadProc, (LPVOID)&stParam,.....)


DWORD WINAPI ThreadPro(LPVOID lp)其中LP是一个指针 在线程中

DWORD WINAPI ThreadPro(LPVOID lp)
    ThreadParam* theParam = (ThreadParam*)lp;
       
     // .......
     // 观察者也好, 简单的关键区也好, 总之是某种Watch逻辑
     // ....
     OnEvent(IsChanged(*(theParam->pVarBeingWatched)))
         theParam->pObject->SomeFunction();
         theParam->pObject->SomeVariable++;
     
     // 一切操作随你

参考技术C CreateThread()是可以传递变量值的;
DWORD WINAPI ThreadPro(LPVOID lp)其中LP是一个指针。要传递变量还把你难到了?
参考技术D while(退出线程标志)

if(变量值值改变了)

调用你的函数

Sleep(10);//腾出一点空闲

以上是关于C++线程更新变量问题的主要内容,如果未能解决你的问题,请参考以下文章

从主循环访问线程变量 - c++ - windows

C++ 中的游戏更新(线程或计时器)?

混合 C 和 C++ 的线程同步

C ++线程:尽管没有种族,但共享内存未更新

简单的多线程帮助? C++、WaitForSingleObject 和同步

具有全局变量的 C++ 多线程