• <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            posts - 200, comments - 8, trackbacks - 0, articles - 0

            回顧:
              線程與進程
              1.進程由于資源獨立,進程的主要關(guān)注是解決資源共享
              2.線程先天是數(shù)據(jù)共享,線程主要關(guān)注共享數(shù)據(jù)臟
                1.互斥量(線程內(nèi))
                   讀寫鎖

                2.信號/條件量調(diào)度(線程之間)
                 信號量

            一.線程的信號量
              1.定義信號量sem_t
              2.初始化信號量sem_init
              3.操作信號量sem_post  sem_wait
              4.釋放信號量sem_destroy  
              5.其他函數(shù)sem_getvalue
            案例:
              創(chuàng)建一個子線程
                子線程-信號量(阻塞)
                主線程+信號量(解除阻塞)
              體會:
                信號量可以累加
                +-操作單位是1


            #include 
            <pthread.h>
            #include 
            <semaphore.h>
            #include 
            <stdio.h>
            sem_t  sem;
            //
            void *run(void*d)
            {
                
            while(1)
                {
                    
            //3.
                    sem_wait(&sem);
                    printf(
            "解除\n");
                }
            }
            main()
            {
                pthread_t tid;
                
            //2
                sem_init(&sem,0,5);
                pthread_create(
            &tid,0,run,0);
                
            while(1)
                {
                    
            //
                    sleep(1);
                    sem_post(
            &sem);
                }
            }

            一開始打印5次,然后每隔一秒打印一次。
            作業(yè):
              搖獎程序,繼續(xù)暫停7位隨機數(shù)
              信號量/條件量/信號?
              目的:選擇哪種技術(shù)實現(xiàn)?
                1.無法使用互斥與讀寫鎖實現(xiàn).
                2.信號實現(xiàn)不穩(wěn)定.
                3.沒有互斥建議不考慮條件量.
                4.最佳選擇信號燈.  
            二.線程的讀寫鎖(自學(xué))
              pthread_rwlock_t;

              pthread_rwlock_init;
              pthread_rwlock_destroy;

              pthread_rwlock_rdlock;
              pthread_rwlock_wrlock;
              pthread_rwlock_unlock;

              讀讀兼容
              寫寫互斥
              讀寫互斥

              作用主要是為IO操作設(shè)計.

            三.線程私有數(shù)據(jù)(了解)
              pthread_key_create
              pthread_key_delete

            四.QT
            1.工具
              assistant  幫助文檔
              qtconfig  QT配置工具
              qmake    QT的make與項目文件智能創(chuàng)建工具
              uic     UI界面的設(shè)計文件的編譯工具
              moc     moc代碼創(chuàng)建工具
              designer  UI設(shè)計工具
            2.QT 的模塊
              qtcore
              qtgui
              qtnetwork  
              qtsvg
              qtopengl

            3.第一QT程序
              1.QT編程模型
              2.QT程序編譯過程
              3.QT的項目組織


            #include 
            <QApplication>
            #include 
            <QDialog>
            int main(int args,char **argv)
            {
                
            //qmake -project
                
            //qmake **.pro
                
            //make
                
            //執(zhí)行程序
                QApplication app(args,argv);  //將main的參數(shù)傳進去
                ////////////////////////////
                //在這里可以隨便創(chuàng)建窗體
                QDialog dlg;
                dlg.setVisible(
            true);
                
                
            ////////////////////////////    
                return app.exec();//等待所有子線程結(jié)束,才能結(jié)束
            }
            注意:  
             1.QT是C++程序.  
             2.QT程序要啟動QT的環(huán)境QApplication
             3.編程的模型
               qmake -project
               qmake *.pro
               make
               執(zhí)行
            4.*.pro文件
              TEMPLATE=
                :app 應(yīng)用程序
                :lib 庫
              SOURCES=
                :cpp文件1 cpp文件2 cpp文件3 ....
                :\ 續(xù)行符號
                :SOURCES+=
              HEADERS=
                :h頭文件
              CONFIG=   影響gcc的選項
                :release | debug
                :warn_on | warn_off   -Wall -w
                :qt | opengl  
                :shared  | static 
              QT=  (該變量在CONFIG=qt才有意義)
                :core 
                :gui
                :network 
                :opengl
                :svg
                :xml
                :sql
              TARGET=    
                :輸出文件名 (-o輸出文件)
              LIBS=用戶指定庫
                :-l  -L
              FORMS=ui文件
            小例子: 

            TEMPLATE
            =app
            SOURCES
            =main.cpp
            HEADERS
            =
            CONFIG
            =qt release
            QT
            =core gui
            TARGET
            =main
            LIBS
            =-L.

            5.怎么學(xué)習(xí)QT 
              QT類的結(jié)構(gòu)層次.
              QT的信號signal與槽slot.
              QT基本組件
              QT的UI設(shè)計器

            五.直觀認識QT
              封裝與幫助文檔的使用
              1.文檔的組成部分:
                1.模塊
                2.類作用簡單描述  
                3.頭文件
                4.父類與派生類
                5.構(gòu)造器/析構(gòu)器()
                6.共有函數(shù)
                7.屬性
              2.亂碼處理
               QT提供翻譯機制
               QTextCodec 


            #include 
            <QApplication>
            #include 
            <QDialog>
            #include 
            <QPushButton>
            #include 
            <QTextCodec>
            #include 
            <QLineEdit>
            int main(int args,char**argv)
            {
                QApplication app(args,argv);
                
                QTextCodec 
            *codec=QTextCodec::codecForName("gb2312");
                
                QTextCodec::setCodecForTr(codec);
                
                QDialog dlg;
                dlg.resize(
            400,300);
                dlg.move((
            1024-400)/2,(768-300)/2);
                
                QPushButton btn(
            &dlg);
                btn.resize(
            100,30);
                btn.move(
            100,100);
                btn.setText(QObject::tr(
            "確定"));  //轉(zhuǎn)碼,防止亂碼
                
                QLineEdit edt(
            &dlg);
                edt.resize(
            100,30);
                edt.move(
            100,200);
                edt.setText(QObject::tr(
            "確定"));
                
                dlg.setVisible(
            true);
                
            return app.exec();
            }
            pro文件的編寫:
            TEMPLATE=app
            SOURCES
            =main.cpp
            CONFIG
            =release qt
            QT
            =core gui
            TARGET
            =main
            3.代碼組織
               以窗體為基本單位的封裝
            案例:
              登錄
               QDialog
               QPushButton
               QLabel
               QLineEdit 

            //logindlg.h
            #ifndef LOGIN_DLG_H
            #define LOGIN_DLG_H
            #include 
            <QDialog> 
            #include 
            <QLabel>
            #include 
            <QLineEdit>
            #include 
            <QPushButton>
            class LoginDialog : public QDialog
            {
            private:
                QLabel 
            *lbluser;
                QLabel 
            *lblpass;
                QLineEdit 
            *edtuser;
                QLineEdit 
            *edtpass;
                QPushButton 
            *btnlogin;
                QPushButton 
            *btncancel;
                
            public:
                LoginDialog(QWidget 
            *parent=NULL);
            };
            #endif

            //logindlg.cpp
            #include "logindlg.h"
            LoginDialog::LoginDialog(QWidget 
            *parent)
                :QDialog(parent)
            {
                resize(
            400,300);
                move((
            1024-400)/2,(768-300)/2);
                
                lbluser
            =new QLabel(this);
                lblpass
            =new QLabel(this);
                    
                lbluser
            ->resize(100,30);
                lbluser
            ->move(50,40);
                
                lblpass
            ->resize(100,30);
                lblpass
            ->move(50,100);
                
                lbluser
            ->setText(QObject::tr("用戶:"));
                lblpass
            ->setText(QObject::tr("口令:"));
                
                edtuser
            =new QLineEdit(this);
                edtpass
            =new QLineEdit(this);
                    
                edtuser
            ->resize(200,30);
                edtuser
            ->move(150,40);
                
                edtpass
            ->resize(200,30);
                edtpass
            ->move(150,100);
                
                btnlogin
            =new QPushButton(this);
                btncancel
            =new QPushButton(this);
                
                btnlogin
            ->resize(60,30);
                btnlogin
            ->move(90,210);
                
                btncancel
            ->resize(60,30);
                btncancel
            ->move(250,210);
                
                btnlogin
            ->setText(QObject::tr("登錄"));
                btncancel
            ->setText(QObject::tr("取消"));
            }
             

            //main.cpp
            #include "logindlg.h"
            #include 
            <QApplication>
            #include 
            <QTextCodec>
            int main(int args,char**argv)
            {
                QApplication app(args,argv);
                QTextCodec 
            *codec
                    
            =QTextCodec::codecForName("gb2312");
                QTextCodec::setCodecForTr(codec);
                
                LoginDialog dlg;
                dlg.resize(
            400,300);
                dlg.setVisible(
            true);
                
                
            return app.exec();
            }

             4.QT的界面設(shè)計器
                designer
                4.1.工具視圖:
                  用戶設(shè)計區(qū)
                  工具箱      
                  資源管理器
                  屬性編輯器(ctrl+i)
                  動作編輯器
                  信號槽編輯器
                  對象察看器(選擇對象)
                4.2.保存文件
                  *.ui  

                4.3.編輯屬性
                  1.文本屬性
                  2.對象名屬性
                  3.字體屬性  
                4.4.編輯組件
                  ->  <-方向
                  shift+
                  ctrl+
                  shift+ctrl+
                4.5.打開ui文件
                  ui是xml文本文件
                4.6.使用ui文件
                  自動使用
                  手工使用
                  uic編譯ui文件
                  產(chǎn)生:Ui_對象名的類
                    Ui::對象名的類

                  類的構(gòu)造器:沒有(缺省構(gòu)造器)
                  類的方法:setUpUi(QDialog *);  
                    
                4.7.使用UI類型      
            作業(yè):
               1.完成計算器的界面
               
               思考:
               2.創(chuàng)建線程?不停調(diào)用文本組件的setText()修改文本?





            久久国产免费观看精品3| 99久久夜色精品国产网站| 91精品国产91久久久久久蜜臀| 欧美777精品久久久久网| 久久人人爽人人精品视频| 国内精品伊人久久久久妇| 亚洲AV成人无码久久精品老人| 成人国内精品久久久久影院| 久久精品国产亚洲7777| 无码久久精品国产亚洲Av影片| 91久久精品国产91性色也| 精品伊人久久大线蕉色首页| 久久精品视频网| 综合网日日天干夜夜久久| 精品久久久无码中文字幕 | 国产精品久久久久久久午夜片| 精品久久久一二三区| 国产三级观看久久| 久久亚洲精精品中文字幕| 香蕉久久永久视频| 久久99精品久久久久久不卡| 久久99国产精品尤物| 久久精品亚洲AV久久久无码| 久久久受www免费人成| 欧美久久综合性欧美| 久久精品人人做人人妻人人玩| 久久久这里只有精品加勒比 | 日韩精品久久久肉伦网站| 久久精品国产第一区二区| 精品综合久久久久久97超人| 亚洲精品无码成人片久久| 久久夜色精品国产噜噜亚洲a| 久久久WWW成人免费精品| 国产ww久久久久久久久久| 久久国产高清字幕中文| 久久婷婷五月综合国产尤物app| 99久久香蕉国产线看观香| 2021国产精品午夜久久| 久久婷婷是五月综合色狠狠| 综合久久精品色| 久久综合亚洲鲁鲁五月天|