qt與linux的線程

來源:互聯網
上載者:User

 作者:武漢華嵌嵌入式培訓中心 技術部

以下和大家分享Linux平台下Qt兩種多線程編程的方式:

1、使用Linux平台下的線程函數。以下是給出的程式碼片段:

//此處為串連訊號和槽,通過Qt介面中兩按鈕來控制兩個槽函數

connect(pthred1start, SIGNAL(clicked()), this, SLOT(pthread1start()));

connect(pthred1stop, SIGNAL(clicked()), this, SLOT(pthread1stop()));

/***************************linux平台下的線程****************************/

//此函數為線程處理函數

void *mythread(void *arg)

{

Qt1 *tt = (Qt1 *)arg; //接收qt1的this指標

tt->i = 0;

while(1)

{

(tt->i)++;

qDebug()<<"i is : "<<tt->i;

//通過接收來的指標操作qt1的介面

tt->LeFirst->setText(QString::number(tt->i));

sleep(1);

}

}

void Qt1::pthread1start()

{

//在槽函數中通過Linux下的線程函數來建立一個線程,並且
//把Qt1中的this指標傳到線程函數中

int ret = pthread_create(&ptid, NULL, mythread, (void *)this);

if(ret != 0)

{

printf("wrong\n");

}

}

void Qt1::pthread1stop()

{

//關閉線程

pthread_cancel(ptid);

}

2、使用QT內建的線程類。以下是給出的程式碼片段:

要使用QT內建的線程類,來實現多線程編程,需要子類化QThread,並且重新實現它的run()函數就可以了。如下所示:

//子類化QThread

class myThread: public QThread

{

Q_OBJECT

public:

myThread(QWidget *parent = 0);

~myThread();

void run();

Qt1 *tt;

int i;

};

/*******************qt內建線程*************************/

//子類化QThread的建構函式的實現,並且對成員變數進行初始化

myThread::myThread(QWidget *parent)

{

i = 0;

tt = (Qt1 *)parent;//儲存qt1對象的this指標的值

}

myThread::~myThread()

{

}

/**************qt內建線程start後,會自動執行run函數*********/

//重新實現QThread的run()函數

void myThread::run()

{

while(1)

{

(tt->i)++;

qDebug()<<"i is : "<<(tt->i);

//通過接收的this指標的值,來操作qt1對象的介面

tt->LeFirst->setText(QString::number(tt->i));

sleep(1);

}

}

以上是實現了自己的線程類,然後就如何使用了,使用如下:

在介面的建構函式中有如下代碼:

//產生一個自己實現的qt中的線程類對象

thread = new myThread(this);

//通過兩個控制項來控制線程的開始和結束

connect(qthreadstart, SIGNAL(clicked()), this, SLOT(pthread2start()));

connect(qthreadstop, SIGNAL(clicked()), this, SLOT(pthread2stop()));

void Qt1::pthread2start()

{

thread->start();//啟動qt線程

}

void Qt1::pthread2stop()

{

thread->terminate();//停止qt線程

}

注意:
以上都只是給出了線程的使用,但是,在程式中如何使用得視情況而定。

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.