多執行緒串列埠接收資料 全域性變數的使用

2021-08-07 23:59:28 字數 1811 閱讀 5835

開啟乙個新執行緒,死迴圈接收串列埠資料

一. 在工程新增threa.h和thread.cpp

thread.h

#ifndef thread_h

#define thread_h

#include

class thread : public qthread

;#endif // thread_h

thread.cpp

#include

"thread.h"

#include

"mainwindow.h"

extern win_qextserialport *p_serialport;

thread

::thread()//開啟執行緒時,先執行建構函式,再執行run()

void

thread

::run()

stopped =

false;

} void

thread

::stop()

二. 在相應的檔案的標頭檔案(本例為mainwindow.h)加上

#include "thread.h"

並在私有槽函式裡面加上串列埠資料處理函式的宣告

private slots:

void

readmycom(const qstring &);

再宣告乙個私有變數

private:

thread* threada;//宣告thread變數

三. 在相應的檔案的cpp檔案(本例為mainwindow.cpp)的建構函式中加入

threada = new thread();//定義thread變數

connect(threada,signal(threadmycom(qstring)),this,slot(readmycom(qstring)));//關聯串列埠接收訊號和串列埠資料處理函式

編寫串列埠資料處理函式void mainwindow::readmycom(const qstring &str){};

最後,執行start()即可開啟多執行緒,開啟的執行緒先進入執行緒建構函式,然後執行run()函式;執行stop()退出該執行緒。

if(threada->isrunning())//判斷執行緒是否處於開啟狀態

else

目的:想在b.cpp中應用a.cpp的變數temp

(此例中a為mainwindow,b為thread)

方法:一. 在a.cpp中(注意:不是標頭檔案中)定義變數temp

#include

"mainwindow.h"

#include

"serialport.h"

int temp;

mainwindow::mainwindow(qwidget *

parent, qt::wflags flags){}

二. 在b.cpp中(注意:不是標頭檔案中)定義時加上extern,並加上a的標頭檔案a.h

#include

"thread.h"

#include

"mainwindow.h"

extern int temp;

thread

::thread(){}

7 多執行緒 全域性變數 共享全域性變數

多執行緒 全域性變數 共享全域性變數 多執行緒可以對全域性變數進行修改,修改後的結果會影響下乙個執行緒 程序不可以共享全域性變數,子程序是複製父程序的全域性變數,修改後互不影響 from threading import thread import time,random g num 100 def...

多執行緒共享變數 多執行緒共享全域性變數

1.多執行緒的執行順序是無序的 像2個人賽跑,乙個先跑乙個後跑,但根據每個人跑的速度不一樣,跑一半,二者可能跑在一起去了。2.又因為多執行緒是共享乙個全域性變數的,就導致資料容易被弄髒 假如老闆讓兩個員工寫兩個主題ppt,若這兩個人沒商量好,都做了同乙個主題的ppt,導致不但速度很慢,且這個ppt有...

c 多執行緒修改全域性變數

我的程式有乙個mainform,乙個childform mainform是主介面,程式執行之後根據情況彈出多個childform,在childform的load事件中,我需要對乙個全域性變數 字串 修改,應該怎麼做?問題 1 這個全域性變數應該宣告在什麼地方?如果宣告在childform裡面的話,在...