QT线程内调用外部函数发送信号是否有正确?多线程调用外部函数需要注意哪些问题?

大家好,我在QT多线程编程时,在线程内部调用了一个外部函数,外部函数中使用了emit来发送信号,请问这样是否会存在问题?另外,在线程中调用外部函数时需要注意哪些问题?

1个回答

我编写的代码大概如下:
class myThread:public QThread;
class DeviceScaner:public QObject
{
Q_OBJECT

public:
DeviceScaner();
~DeviceScanner();
void readData();

signals:
void readyRead(QString data);

private:
myThread *thread;
bool run_flag;
};

DeviceScanner::DeviceScanner()
{
run_flag = true;
thread = new myThread(this);
if(thread)
{
thread->start();
}
}

DeviceScanner::~DeviceScanner()
{
run_flag = false;
if(thread)
{
thread->wait();
delete thread;
}
}

void DeviceScaner::readData()
{
emit readyRead("Test Data");
}

class myThread:public QThread
{
public:
myThread(void *param);

protected:
void run();

private:
void *lp;
};

myThread::myThread(void *param)
{
lp = param;
}

void myThread::run()
{
if(lp == NULL)
{
return;
}
DeviceScaner lpScanner = (DeviceScaner)lp;
whilt(lp->run_flag)
{
sleep(1);
lp->readData();
}
}
代码是临时敲的,可能会有错误。DeviceScanner类中的信号会连接到其它类的槽,小弟使用QT的时间不长,

不知道这样的用法是否正确,有精通QT的大神还望赐教。

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
其他相关推荐
Python+OpenCV计算机视觉

Python+OpenCV计算机视觉

Qt 槽函数 两次调用 跨线程的信号槽函数(信号触发一次,槽函数被调用两次)

WorkerThread* pWorkerThread = new WorkerThread; pWorkerThread->moveToThread(&m_thread); connect(this, &Dialog::sigSetCOM, pWorkerThread, &WorkerThread::slotSetCOM, Qt::QueuedConnection); connect(this, &Dialog::sigSerialOpen, pWorkerThread, &WorkerThread::slotSerialOpen, Qt::QueuedConnection); connect(this, &Dialog::sigSetFilePath, pWorkerThread, &WorkerThread::slotSetFilePath, Qt::QueuedConnection); connect(pWorkerThread, &WorkerThread::sigSetProgressValue, this ,&Dialog::slotSetProgressValue, Qt::QueuedConnection); connect(pWorkerThread, &WorkerThread::resultReady, this ,&Dialog::handleResults, Qt::QueuedConnection); connect(pWorkerThread, &WorkerThread::sigBtOpenStateChange, this ,&Dialog::slotBtOpenStateChanged, Qt::QueuedConnection); connect(pWorkerThread, &WorkerThread::sigResetState, this ,&Dialog::slotResetState, Qt::QueuedConnection); connect(this, &Dialog::sigSend, pWorkerThread, &WorkerThread::slotSend); connect(&m_thread, &QThread::finished, pWorkerThread, &QObject::deleteLater); m_thread.start(); // 设置参数 //emit ui->serialPortName->currentIndexChanged(ui->serialPortName->currentText()); emit sigSetCOM(m_param); ``` ``` 上面的槽函数Dialog::slotBtOpenStateChanged(倒数第四个connect) 只连接了一次如下: connect(pWorkerThread, &WorkerThread::sigBtOpenStateChange, this ,&Dialog::slotBtOpenStateChanged, Qt::QueuedConnection); 按理说是pWorkerThread线程中信号WorkerThread::sigBtOpenStateChange触发后才会调用槽函数Dialog::slotBtOpenStateChanged,但是我的代码中只是在pWorkerThread触发了一次信号,而实际槽函数Dialog::slotBtOpenStateChanged却被调用了两次。一次与pWorkerThread有关。一次与Dialog有关,因为都有一个bool参数,Dialog触发的带的值不是我想要的。这与Dialog有关的多一次调用是为什么???

qt std::thread线程如何发送一个信号调用主线程的一个函数

qt按钮下新建了一个线程 std::thread th1(&MainWindow::runTest,this,str_ModelName); th1.detach(); connect(th1,SIGNAL(robotStat(int)),this,SLOT(runTest1(int))); 想要用runtest里面的一个信号,去调用runtest1这个函数, 编译th1不能转为qobject*,请问如何连接

QT界面开发,线程函数里面不饿能够调用UI控件的问题

用QT做上位机界面,在QT头文件定义类 class MainWindow : public QMainWindow { QOBJECT piblic : explicit MainWindow(QWidget parent =0); ~MainWindow(); int initPort(); static DWORD stdcall ThreadPDoTest( DWORD EventID, LPVOID pBuf, DWORD BufLen, LPVOID UserData); private: Ui:: Mainwindow *ui; } #end if 然后ThreadPDoTest函数是这样定义的: DWORD __stdcall MainWindow threadDotest(DWORD EventID, LPVOID pBuf, DWORD Buflen, LPVOID UserData)//。主要功能是完成数据的计算并且显示到QT的控件上 { .... c1=(float)(256*data[1]+data[0])-512)*1.5/1000; ui->NUMERIC_C1->setText(temp.setNum(c1)); c2=... .... } 编译报错 invalid use of member ' MainWindow :: *ui' instatic member function 我看网上说把ui 改成public可行,但是主线程函数中才行,不然就会崩溃。

请问C++11的多线程如何在类的成员函数里调用另一个成员函数在新线程里执行

``` void ClassA::Fun1() { std::thread t(&ClassA::Fun2); // 测试过这种std::thread t(std::mem_fn(ClassA::Fun2),this); // 也不行 t.join(); } void ClassA::Fun2() { // do sth... } ```

QT5中 socket 与 多线程的问题(聊天程序)

大家好 我在用QT5写一个聊天程序 用的是c/c++的封装的socket函数(QT封装的UDP不知道为什么不能正常发包) 问题是这样的: 有两个窗口 1. MainWindow 类的 login,程序启动首先显示它 2. Dialog 类的 chat, 要求登陆成功后才显示它 这两个窗口在main中QApplication a 和 a.exec()之间创建。 login窗口其中一个button点击后可以向服务器发送一个登陆请求,那么,如何 接收这个请求呢?我目前的做法是同样将这个button connect了一个receive函数, 不过只接受一个包,这样实现真的很丑,而且无法做到持续监听(这是chat窗口中的 关键) 我尝试用了c++11的thread来写多线程,传入一个窗口的指针,但好像不允许在子线程里调用窗口类实例的show()之类的函数,报错了(这点也是我很想知道的,类中定义的public成员函数可以在子线程中调用,但是不能调用诸如show(), close()之类的函数) 我刚学QT没多久,参考的很多QT聊天程序都是用QT封装的socket,但是这边用不了,如果一定要用c/c++封装的 有什么好的解决办法来实现吗?

Qt多线程TCP编程会挂掉

先贴上代码 ``` void FortuneWriteThread::run() { QTcpSocket tcpSocket; if (!tcpSocket.setSocketDescriptor(socketDescriptor)) { LogManagerInst << LogManager::LogDegreeType_Error << "Socket " << QString::number(socketDescriptor) << " : " << tcpSocket.errorString(); emit error(tcpSocket.error()); return; } tcpSocket.moveToThread(this); while( !m_quit && tcpSocket.state() == QAbstractSocket::ConnectedState ) { m_mutex.lock(); if(m_replyList.count() == 0) m_replyEmptyCond.wait(&m_mutex); m_mutex.unlock(); // QByteArray head; // QByteArray block; // data to write while(m_replyList.count()) { QByteArray block = m_replyList.takeFirst(); if(block.length() && (block.length() <= 9999)) { QByteArray head = "0000"; head.append(QString::number(block.length())); head = head.right(4); block.prepend(head); tcpSocket.write(block); tcpSocket.flush(); } } } } ``` **挂掉点1**、当我把注释掉的 // QByteArray head; // QByteArray block; 放开后,而把下面的head,block申明去掉后,会在 block = m_replyList.takeFirst(); 这里挂掉,debug出的结果是block不可访问 **挂掉点2** 程序有时候会在tcpSocket.write(block);挂掉,debug不出挂掉的原因 我在if(block.length() && (block.length() <= 9999))下面的大括号里加上lock还是会挂。

为什么有些线程被调用了多次,难道不应该只调用一次吗

#include<windows.h> #include<stdio.h> HANDLE hSemaphore; HANDLE h[3]; DWORD WINAPI ThreadProc15(LPVOID lpParam) { ::WaitForSingleObject(hSemaphore,INFINITE); printf("线程1正在运行\n"); ReleaseSemaphore(hSemaphore,1,NULL); return 0; } DWORD WINAPI ThreadProc16(LPVOID lpParam) { ::WaitForSingleObject(hSemaphore,INFINITE); printf("线程2正在运行\n"); ReleaseSemaphore(hSemaphore,1,NULL); return 0; } DWORD WINAPI ThreadProc17(LPVOID lpParam) { ::WaitForSingleObject(hSemaphore,INFINITE); printf("线程3正在运行\n"); ReleaseSemaphore(hSemaphore,1,NULL); return 0; } void CSample08View() { hSemaphore=CreateSemaphore(NULL,3,1,NULL); DWORD uId; h[0]=::CreateThread(NULL,NULL,ThreadProc15,NULL,NULL,&uId); h[1]=::CreateThread(NULL,NULL,ThreadProc16,NULL,NULL,&uId); h[2]=::CreateThread(NULL,NULL,ThreadProc17,NULL,NULL,&uId); } int main(int argc,char* argv[]) { CSample08View(); ::WaitForMultipleObjects(3,h,TRUE,INFINITE); ::CloseHandle(h[0]); ::CloseHandle(h[1]); ::CloseHandle(h[2]); //z这样一来,总算是有点规律可找了,应该是,如果出现123完整的一组,那么就会退出。 return 0; } //电脑调用线程是随机的,也就是说代码的执行是不受控制的。

Qt使用MySql数据库与多线程

在TcpConThread.h中申明 MySqldb *db; 子线程的一个槽函数 void TcpConThread::on_Ready_Read() { db = new MySqldb; 。。。。 } 为什么使用db能查询到数据但是就是无法对数据库进行任何的修改和插入,插入函数 int MySqldb::insertNewUser(int id, QString password, QString name) { int ret; QSqlQuery query; QString sql = QString("select userID from userinfo"); query.exec(sql); while (query.next()) { if ( query.value(0).toInt() == id ) { ret = 0; //已经存在 } } int flag = 0; QString ip = ""; query.prepare("insert into userinfo (userID, passwd, usernName, flag, IP) values (?,?,?,?,?)"); query.bindValue(0,id); query.bindValue(1,password); query.bindValue(2,name); query.bindValue(3,flag); query.bindValue(4,ip); if(!query.execBatch()) { ret = -1;//插入失败 } else { ret = 1; } return ret; } 打印返回值一直是真,把各个数据打印出来也是对的,但是数据库里面就是找不到这条记录。 求大牛们告知啊,过几天就要毕业答辩了 怎么都调试不出来

Qt 基于UDP的多线程文件传输

发送端5个线程发送数据,接收端主线程接收到数据放入循环队列,同时接收端一个子线程从队列中取出数据并写入文件,但总丢包,不知道问题出在哪?

Qt使用多线程刷新界面,界面一段时间后不响应

我设计了一个串口工作线程和界面刷新主线程。 串口线程如下: #include "thread.h" #include "mainwindow.h" #include <QDebug> #include <QMutexLocker> Thread::Thread() { //初始化 } Thread::~Thread() { mutex.lock(); abort = true; mutex.unlock(); wait(); }//析构 void Thread::run() //这就是线程的具体工作了 { // qint64 f=0; int i; int fd; int nread=1; //int nwrite int count=0;//size of writed buff fd=open("/dev/ttySAC1",O_RDONLY | O_NOCTTY); set_speed(fd,115200); if(set_Parity(fd,8,1,'N')==FALSEE) { printf("Set Parity Error\n"); exit (0); } while(!abort) { qDebug()<<"r:"<<QThread::currentThreadId(); nread=read(fd,buff1,1); qDebug()<<"rea"; if(nread>0) { buff[count]=buff1[0]; count++; // qDebug()<<count; } if(count==16) { dosomething; count=0; emit receiver16(nameflag,time,datas); msleep(85); nameflag=0; } } close(fd); } 界面主线程: #include "mainwindow.h" #include <QPainter> #include <QDebug> #include <QMutexLocker> void MyMainWindow::paintEvent(QPaintEvent *) //paintEvent函数由系统自动调用,用不着我们人为的去调用。 { QPainter paint;//1024*768 paint.begin(this); /*画一大堆东西*/ qDebug()<<"paint"; paint.end(); } MyMainWindow::MyMainWindow(QWidget *parent) :QWidget(parent) { setGeometry(0,0,1024,768); ioread= new Thread; timer = new QTimer; timerPon= new QTimer;//总共4个定时器,但结构都是这样的 ioread->start(QThread::InheritPriority); connect(ioread,SIGNAL(receiver16(int,char *,char *)),this,SLOT(display(int,char *,char *))); connect(timer, SIGNAL(timeout()), this, SLOT(timerFunction())); connect(timerPon, SIGNAL(timeout()), this, SLOT(timerFunctionPon())); //初始化; } void MyMainWindow::display(int nameflag,char *time,char *datas) { qDebug()<<"dis:"<<QThread::currentThreadId(); DoSth……; update(); } void MyMainWindow::timerFunction() { cttimerDoSth; } void MyMainWindow::timerFunctionPon() { PonttimerDoSth; } 运行了一段时间(一般是几个小时后)界面卡住不动了,定时器计时都不显示了,这是怎么回事啊?

Qt 槽函数响应了两次,为什么

有一个窗口类A。现new了两个A对象,其中一个show了出来。窗口类中有个按钮,窗口show出来之后,点击按钮,为什么其槽函数响应了两次? 应该是响应一次啊~~响应那个show出来的对象

qt 线程中接收socket数据

#ifndef TCP_THREAD_H #define TCP_THREAD_H #include <QThread> #include <QTcpSocket> #include <QTcpServer> #define MAX_SEND_MSG_LEN 68 struct _loop_buf { int num_of_unit; // Number of data units int unit_size; int rhead; // Head for read int whead; // Head for write void *buf_head; }; class TcpThread : public QThread { Q_OBJECT private: QTcpServer *tcpServer; QTcpSocket *socket; QString ipAddress; quint16 destinationPort; int Flag; bool quit; struct _loop_buf loop_buf; void run() Q_DECL_OVERRIDE; void processMessage(char *msg); int init_loop_buf(struct _loop_buf *loop_buf, int num_of_unit, int unit_size); void reset_loop_buf(struct _loop_buf *loop_buf); void release_loop_buf(struct _loop_buf *loop_buf); int read_data_from_loop_buf(struct _loop_buf *loop_buf, void *data_unit); QByteArray bytes; QByteArray byteGet; public: TcpThread(QString ipAddress, quint16 destinationPort, QObject *parent = 0); ~TcpThread(); int addMessage(void *data_unit); signals: void error(int socketError, const QString &message); public slots: void finishWork(void); void newConnectionSlot(); void dataReceived(); }; #endif // TCP_THREAD_H .h文件 ``` #if defined(_MSC_VER) && (_MSC_VER >= 1600) #pragma execution_character_set("utf-8") #endif //#define MAX_SEND_MSG_LEN = 68 #include "TcpThread.h" #include "widget.h" #include <QDebug> TcpThread::TcpThread(QString ipAddress, quint16 destinationPort, QObject *parent) : QThread(parent), quit(false) { this->ipAddress = ipAddress; this->destinationPort = destinationPort; // Initialize loop buffer // Max length of messages to be sent is 68 bytes. if (init_loop_buf(&loop_buf, 128000, MAX_SEND_MSG_LEN) != 0) { qDebug() << "Can't initialize loop buffer."; return; } } TcpThread::~TcpThread() { // Wait for the end of the thread. quit = true; wait(); } void TcpThread::run() { // // At here, it is in the execution context of newly created thread. // So, it is better to define or create objects here. // Or, following error may occurred: // QObject: Cannot create children for a parent that is in a different thread // char *msg;//, *sendMsg; int conn_timeout = 30000; int read_timeout = 5000; int write_timeout = 5000; int bytesToRead, readBytes; int bytesToWrite, writeBytes; int ret; int gotMessageHead = 0; int toGetNewMessage = 0; //msg = (char *)calloc(65536 + 128, 1); msg = (char *)calloc(MAX_SEND_MSG_LEN, 1); if (msg == NULL) { qDebug() << "Can't allocate memory."; return; } tcpServer = new QTcpServer(); socket = new QTcpSocket(); //connect(tcpServer, SIGNAL(newConnection()), this, SLOT(newConnectionSlot()), Qt::DirectConnection); if (!tcpServer->isListening()) { qDebug() << ipAddress; //if (tcpServer->listen(QHostAddress::QHostAddress(ipAddress), 16512)) if (tcpServer->listen(QHostAddress::Any, 16512)) { //m_pEdt_Info->append(QObject::tr("打开监听端口成功!111")); qDebug()<< QObject::tr("打开监听端口成功!111"); socket = tcpServer->nextPendingConnection(); // //connect(socket, SIGNAL(disconnected()), socket, SLOT(deleteLater())); connect(socket, SIGNAL(readyRead()),this, SLOT(dataReceived())); } else { //m_pEdt_Info->append(QObject::tr("打开监听端口失败!")); qDebug()<< QObject::tr("打开监听端口失败!11"); } } else { //m_pEdt_Info->append(QObject::tr("正在监听中...!")); qDebug()<< QObject::tr("正在监听中...!"); } qDebug() << "Connected to" << ipAddress; // reset read variables readBytes = 0; bytesToRead = 4; gotMessageHead = 0; // reset write variables writeBytes = 0; toGetNewMessage = 1; } void TcpThread::processMessage(char *msg) { qDebug() << "Receive message:" << *(unsigned short *)msg << ". Length:" << *(unsigned short *)(msg + 2); } void TcpThread::finishWork(void) { quit = true; } int TcpThread::init_loop_buf(struct _loop_buf *loop_buf, int num_of_unit, int unit_size) { unsigned long long total_size; total_size = (unsigned long long)unit_size * (unsigned long long)num_of_unit; if (total_size > 0x7fffffff) { printf("Memory to be allocated is too large.\n"); return -1; } if (num_of_unit > 0x7ffffff0) { printf("Buffer size can't exceed 0x7ffffff0.\n"); return -1; } loop_buf->num_of_unit = num_of_unit; loop_buf->unit_size = unit_size; loop_buf->rhead = 0; loop_buf->whead = 0; loop_buf->buf_head = malloc(total_size); if (loop_buf->buf_head == NULL) { printf("Can't allocate memory for the loop buffer.\n"); return -1; } return 0; } // Be careful to call this function. You must make sure that // nobody is using the loop buffer pointed by 'loop_buf', // or error may occur. void TcpThread::reset_loop_buf(struct _loop_buf *loop_buf) { loop_buf->rhead = 0; loop_buf->whead = 0; } void TcpThread::release_loop_buf(struct _loop_buf *loop_buf) { free(loop_buf->buf_head); } // // Return value: // 0: Success. // -1: The loop buffer is NULL. // int TcpThread::read_data_from_loop_buf(struct _loop_buf *loop_buf, void *data_unit) { if (loop_buf->rhead == loop_buf->whead) { // The buffer is null. return -1; } // // Do your work here, you can read data from the loop buffer. // Following is just an example. // // Note: // Must copy the data out, or the content of the data unit may be // overwritten. // memcpy(data_unit, (char *)loop_buf->buf_head + loop_buf->rhead * loop_buf->unit_size, (size_t)loop_buf->unit_size); if (loop_buf->rhead == (loop_buf->num_of_unit - 1)) { loop_buf->rhead = 0; } else { loop_buf->rhead++; } return 0; } // // --- IMPORTANT --- // There is no mutex to avoid race condition in the function's implementation. // So, to call this function from only one code source. // //Return value: // 0: Success. // -1: The loop buffer is full. // int TcpThread::addMessage(void *data_unit) { int tmp_whead = 0; tmp_whead = loop_buf.whead + 1; if (tmp_whead >= loop_buf.num_of_unit) { tmp_whead = 0; } if (tmp_whead == loop_buf.rhead) { // The buffer is full. return -1; } // // Do your work here, you can write data to the loop buffer. // Following is just an example. // memcpy((char *)loop_buf.buf_head + loop_buf.whead * loop_buf.unit_size, data_unit, (size_t)loop_buf.unit_size); loop_buf.whead = tmp_whead; return 0; } void TcpThread::newConnectionSlot() { //m_pEdt_Info->append(QObject::tr("有新客户端连接到服务器")); socket = tcpServer->nextPendingConnection(); connect(socket, SIGNAL(disconnected()), socket, SLOT(deleteLater())); connect(socket, SIGNAL(readyRead()),this, SLOT(dataReceived())); } void TcpThread::dataReceived() { bytes = socket->readAll(); qDebug() << bytes.length() << bytes.size(); //if (bytes.size()=0) waitfo if (byteGet.size()!=0){ byteGet.append(bytes.left(68-byteGet.size())); bytes.remove(0,68-byteGet.size()); qDebug() << byteGet.length() << bytes.size(); } for (;bytes.size()>=68;){ byteGet = bytes.left(68); //m_pEdt_Info->append(byteGet.toHex()); bytes.remove(0,68); qDebug() << byteGet.length() << bytes.size(); } if (bytes.size()>0&&bytes.size()<68){ byteGet = bytes; bytes.remove(0,byteGet.size()); qDebug() << byteGet.toHex(); qDebug() << byteGet.length() << bytes.size(); //bytes = m_pSocket->readLine(); //m_pServer->close(); } } ``` .cpp文件 线程中接收数据,使用信号机制可不可以啊? 我用connect(socket, SIGNAL(readyRead()),this, SLOT(dataReceived())); 发现Slot里面定义的接收数据并未调用到。为什么,是this的问题,还是不应该这样使用信号机制。或者还有别的什么好方法吗,麻烦各位大神热点,感激

QT 多线程TCP通讯问题 程序异常退出

我在运行过一个网上下载的多线程服务器后,我自己写的单线程的客户端和服务端就不再连的上了, 我百度了一下说是可能是因为我多次调用了connectToHost,所以点击连接时程序会异常退出,但这个问题怎么解决呢?因为我现在是换了端口也连不上了。 错误提示我也没弄懂,这个函数在cpp里写了呀 ![图片说明](https://img-ask.csdn.net/upload/201908/23/1566529412_850530.png) 找到的解决方法说减少次数,可是我现在根本就连不上了。之前连的也不知道怎么删除。。。 ![图片说明](https://img-ask.csdn.net/upload/201908/23/1566528556_717591.png)

PyQt4 信号连接槽中自定义的函数

![图片说明](https://img-ask.csdn.net/upload/201812/17/1545036916_979067.png) 图中1和2处信号连接的函数不执行,如果将1和2处的函数换成3处的函数会执行 将图中3处的函数换成1的函数也不会执行 图中3的函数是另一个class的函数 这是什么问题

QMetaObject::invokeMethod 返回true,但是对应的slot函数没有执行

先上代码: ``` QMetaObject::invokeMethod(m_manager, "onEventRequest", Qt::QueuedConnection, Q_ARG(int, 0)); ``` 经过调试发现invokeMethod返回true,但是却没有执行对应的onEventRequest函数. 这些参数中: m_manager是在主线程中创建的,onEventRequest的声明: public slots: void onEventRequest(int idx); 执行invokeMethod的线程是由QThread::Run创建的 如果参数换成Qt::DirectConnection是可以调用到函数onEventRequest的声明的,但是这样就是同一个线程执行了... 我在onEventRequest函数中加了断点,发现没有执行进这个函数 请问这样的情况如何调试? 之前有没有碰到过这样的问题? 返回true的话就是说event已经在消息队列里了,那是不是有可能因为什么原因导致阻塞了消息队列?

linux多线程之间加usleep()。

我现在有个困惑:大致就是在一个TCP服务器中创建两个线程,一个接收消息并进行相应的处理,一个发送消息并进行相应的处理。 现在的情况就是我如果在两个线程之间加上usleep(100)的话,数据的传输不会丢包,具体线程处理函数就不必细说。 就单单这过程有什么门道吗?()

QT中多个子线程发出同一信号给主线程的槽函数,槽函数如何执行呢?

我发现在多个子线程同时发信号调用主线程的槽函数的时候,槽函数运行会出错。 想问一下大家,这种情况下,槽函数应该如何写才能做到相互不干扰?

QT中次线程的传参值怎么赋给主线程?求教

viod ProThread2::run(){ FvsImage_t mask; FvsImage_t image; FvsImage_t directionimage; FvsMinutiaSet_t minutia = minutiaSet; FvsFloatField_t direction; FvsFloatField_t frequency; MinutiaSetExtract(minutia, image, direction, mask); } 这段次线程中的minutia值如何取到主线程中去? void Widget::match(){ FvsError MatchingCompareMinutiaSets(minutia1 ,minutia2 ,a); } 如这个主线程函数中要调用minutia值。

Qt多线程QtConcurrent::map(vector, spin),spin能否是类方法

rt QtConcurrent::map(vector, spin) 发现qt的例子中给的都是定义在外面的函数,而不是类方法,若换成类方法调试报错。 新手,请大家指教!

2019 Python开发者日-培训

2019 Python开发者日-培训

150讲轻松搞定Python网络爬虫

150讲轻松搞定Python网络爬虫

设计模式(JAVA语言实现)--20种设计模式附带源码

设计模式(JAVA语言实现)--20种设计模式附带源码

YOLOv3目标检测实战:训练自己的数据集

YOLOv3目标检测实战:训练自己的数据集

java后台+微信小程序 实现完整的点餐系统

java后台+微信小程序 实现完整的点餐系统

三个项目玩转深度学习(附1G源码)

三个项目玩转深度学习(附1G源码)

初级玩转Linux+Ubuntu(嵌入式开发基础课程)

初级玩转Linux+Ubuntu(嵌入式开发基础课程)

2019 AI开发者大会

2019 AI开发者大会

玩转Linux:常用命令实例指南

玩转Linux:常用命令实例指南

一学即懂的计算机视觉(第一季)

一学即懂的计算机视觉(第一季)

4小时玩转微信小程序——基础入门与微信支付实战

4小时玩转微信小程序——基础入门与微信支付实战

Git 实用技巧

Git 实用技巧

Python数据清洗实战入门

Python数据清洗实战入门

使用TensorFlow+keras快速构建图像分类模型

使用TensorFlow+keras快速构建图像分类模型

实用主义学Python(小白也容易上手的Python实用案例)

实用主义学Python(小白也容易上手的Python实用案例)

程序员的算法通关课:知己知彼(第一季)

程序员的算法通关课:知己知彼(第一季)

MySQL数据库从入门到实战应用

MySQL数据库从入门到实战应用

机器学习初学者必会的案例精讲

机器学习初学者必会的案例精讲

手把手实现Java图书管理系统(附源码)

手把手实现Java图书管理系统(附源码)

极简JAVA学习营第四期(报名以后加助教微信:eduxy-1)

极简JAVA学习营第四期(报名以后加助教微信:eduxy-1)

.net core快速开发框架

.net core快速开发框架

玩转Python-Python3基础入门

玩转Python-Python3基础入门

Python数据挖掘简易入门

Python数据挖掘简易入门

微信公众平台开发入门

微信公众平台开发入门

程序员的兼职技能课

程序员的兼职技能课

Windows版YOLOv4目标检测实战:训练自己的数据集

Windows版YOLOv4目标检测实战:训练自己的数据集

HoloLens2开发入门教程

HoloLens2开发入门教程

微信小程序开发实战

微信小程序开发实战

Java8零基础入门视频教程

Java8零基础入门视频教程

相关热词 c#跨线程停止timer c#批量写入sql数据库 c# 自动安装浏览器 c#语言基础考试题 c# 偏移量打印是什么 c# 绘制曲线图 c#框体中的退出函数 c# 按钮透明背景 c# idl 混编出错 c#在位置0处没有任何行
立即提问