日期:2014-05-16  浏览次数:20810 次

如何在工作线程中调用图形界面线程的成员函数(串口通信)?
如题,我在form1。cpp中做好了串口通信的界面和功能,然后另外开了一个线程thread来不断的调用form1.cpp中的成员函数readdata(),readdata()的作用是从串口读数据,在thread中用一个死循环不断的调用readdata(),类似于
while(1)
{
readdata()}
,但是编译出来显示错误,readdata()未定义,所以改为
Form1   a;
while(1)
{
a.readdata()
}
但是还是不行,请问是什么原因?是要加延时吗?还是工作线程thread不能调用图形线程的成员函数啊?

------解决方案--------------------
thread不能调用成员函数.
------解决方案--------------------
你可以声明一个form1的全局指针,然后在线程中通过该指针调用form1中的函数!

------解决方案--------------------
在线程中使用图形界面函数,比如gtk之类的函数,都需要在调用之前加
gdk_threads_enter();
调用完后加上
gdk_threads_leave();


还要线程初始化 g_thread_init(NULL);
gdk_threads_init();