• 3721阅读
  • 3回复

关于线程的问题~ [复制链接]

上一主题 下一主题
离线aoxuehan
 

只看楼主 倒序阅读 楼主  发表于: 2009-10-21
我在UI中定义2个类:
  1. class myThread : public QThread
  2. class Project_Ui : public QMainWindow,public Ui::Project_UiClass

myThread中重写了run方法。
下面这个类里有个myThread的变量。
然后在下面类的一个函数中调用start():
  1. void Project_Ui::speek()
  2. {
  3.     std::string sTemp;
  4.     tSpeek.start();
  5. }

不行。出错。我就跟踪调试。
但是我发现t.Speek.start()之后,调试没有进入myThread的run方法。(我知道java中,start之后,不会马上进入run方法。而是会接着执行下面的代码,下面的代码执行完之后,才执行run)之后进入了sTemp的析构函数xstring。然后继续调试跟踪,进入了moc_Project_Ui.cpp(Project_Ui即是我的类)中的:
  1.     if (_c == QMetaObject::InvokeMetaMethod) {
  2.         switch (_id) {
  3.         case 0: on_listView_clicked((*reinterpret_cast< const QModelIndex(*)>(_a[1]))); break;
  4.         case 1: openFile(); break;
  5.         case 2: saveFile(); break;
  6.         case 3: copy(); break;
  7.         case 4: setFont(); break;
  8.         case 5: setColor(); break;
  9.         case 6: about(); break;
  10.         case 7: speek(); break;
  11.         case 8: test(); break;
  12.         default: ;
  13.         }

函数,到了case7 ,然后break。然后再下一步调试,弹出出错。there is no sources code available***。。

怎么会这样啊??
常梦想自己是地主家的少爷
整天游手好闲,不学无术
没事儿带着一帮狗奴才在大街上调戏良家妇女。
离线aoxuehan

只看该作者 1楼 发表于: 2009-10-21
我刚刚随便写了个小程序。
就以个按钮。
点击一个按钮,然后就调用start(),调试发现。同样错误,没有进入run函数中,而是弹出错误。
常梦想自己是地主家的少爷
整天游手好闲,不学无术
没事儿带着一帮狗奴才在大街上调戏良家妇女。
离线rqzrqh

只看该作者 2楼 发表于: 2009-10-21
没有这个槽??
离线aoxuehan

只看该作者 3楼 发表于: 2009-10-21
有啊~:
connect(pushButton,SIGNAL(clicked()),this,SLOT(speek()));
常梦想自己是地主家的少爷
整天游手好闲,不学无术
没事儿带着一帮狗奴才在大街上调戏良家妇女。
快速回复
限100 字节
 
上一个 下一个