怎么在一个cpp里启用另一个cpp中的线程函数

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了怎么在一个cpp里启用另一个cpp中的线程函数相关的知识,希望对你有一定的参考价值。

详细情况是这样的,我子啊一个类中些了一个县城函数,另一个类成员中想要AfxBeginThread();创建对象引用,可是线程函数又不是类的成员函数,这应该怎么处理呢?

没怎么看明白你在说什么,你是不是想在一个类中创建另一个线程,新创建的线程又要访问当前类的数据成员,如果是这样可以如下:
1.创建线程用AfxBeginThread()
2.在类中申明一个static DWORD WINAPI WorkerThread(LPVOID lpParam);函数并把这个函数作为子线程的入口函数,同时把创建线程类的指针也扔给新创建的线程。
3.在static DWORD WINAPI WorkerThread(LPVOID lpParam);调用创建类的任何一个公有函数就可以调用它本身的数据成员追问

我在一个cpp里面写了线程函数和启用线程的代码,一个我想用SendMessage(,,,)来映射到对应的对话框,在线程之间传得参数是结构体,那么SendMessage()第一个参数怎么写啊?求解

追答

你必须明白sendmessage一定是给某个窗口过程发送消息,如果你要给另一个线程发消息,这个线程必须要调用任何一个关于窗口的函数,一但调用一个关于窗口的函数该线程就拥有了THEADINFO结构,这时线程就有了消息队列,你就可以给该线程发送消息,你可以在创建线程以后调用CreateWindows函数(创建窗口),把它设置成不显示,这样该线程就有了消息队列你就可以给它发消息了。

追问

请问:char a[100];
CString str=”aaaaaa”;
strncpy(a,(LPCTSTR)str,sizeof(a));
实现一个cstring成员的结构体,转化成为char成员的结构体?
关于你上面的建议我看了一下工程里面有一个这样的代码sendmessage(m_pCurrView->m_hWnd,,,)不知道是你说的在调用窗口句柄,调用自己的窗口类来显示,
CDispMessage *cdg= new CDispMessage;
sendmessage(cdg->m_hWnd,,,)这样建立消息机制,实现窗口上消息?

追答

这个需要你自己建立,你在CreateWindows的时候把一个入口函数注册给你的窗口(一个回调函数),在该函数里面你可以处理消息。
其实你两个线程都是工作线程,为什么要用sendmessage这种东西,线程同步有很多方法,用户级的:锁,关键代码段,核心级的:事件,信号量,互斥等都可以,为什么要用sendmessage给自己找麻烦。如果向界面线程发东西可以用sendmessage,如果不是,最好用别的同步进行处理。

参考技术A 然后在void CShowVgaView::OnInitialUpdate()中利用建立开启线程函数BeginVegaTh 给你一个他隔视图的例子吧 VC共享乐园有哦 参考技术B 然后在void CShowVgaView::OnInitialUpdate()中利用建立开启线程函数BeginVegaTh 给你一个他隔视图的例子吧 VC共享乐园有哦追问

我在一个cpp里面写了线程函数和启用线程的代码,一个我想用SendMessage(,,,)来映射到对应的对话框,在线程之间传得参数是结构体,那么SendMessage()第一个参数怎么写啊?求解

追答

copy来的

参考技术C 给你一个他隔视图的例子吧
VC共享乐园有哦

vs2010怎么调用另一个项目的函数?

vs2010一个解决方案里有两个项目,我想在一个项目里调用另一个项目写的函数 怎么操作

项目-->引用-->右键添加你要调用项目的引用 参考技术A 假如你的另一个项目为BTest,其中有个类是ClassB,你就可以BTest.ClassB调用,跟java的package是一个道理 参考技术B 可以将那个项目编译为库文件,后缀dll,然后引用到当前项目。就可以了。应该是这样,轻喷。 参考技术C http://blog.csdn.net/lins1393997412/article/details/7454817 参考技术D 要先导入另一个项目,具体的我忘了,要配置一下

以上是关于怎么在一个cpp里启用另一个cpp中的线程函数的主要内容,如果未能解决你的问题,请参考以下文章

从 cpp 中的父线程暂停和恢复线程

如何从另一个线程的 cpp 代码同步调用 qml 信号处理程序?

能不能在.cpp文件中调用.cu里的c函数,该怎么处理

如何使用cpp中的QThread使用一个对象运行同一类的两个线程?

c++工程里一个文件怎么调用另外一个文件里的函数

QT C++,如何在在一个CPP里直接调用到另一个CPP里的函数