• <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.進程由于資源獨立,進程的主要關注是解決資源共享
              2.線程先天是數據共享,線程主要關注共享數據臟
                1.互斥量(線程內)
                   讀寫鎖

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

            一.線程的信號量
              1.定義信號量sem_t
              2.初始化信號量sem_init
              3.操作信號量sem_post  sem_wait
              4.釋放信號量sem_destroy  
              5.其他函數sem_getvalue
            案例:
              創建一個子線程
                子線程-信號量(阻塞)
                主線程+信號量(解除阻塞)
              體會:
                信號量可以累加
                +-操作單位是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次,然后每隔一秒打印一次。
            作業:
              搖獎程序,繼續暫停7位隨機數
              信號量/條件量/信號?
              目的:選擇哪種技術實現?
                1.無法使用互斥與讀寫鎖實現.
                2.信號實現不穩定.
                3.沒有互斥建議不考慮條件量.
                4.最佳選擇信號燈.  
            二.線程的讀寫鎖(自學)
              pthread_rwlock_t;

              pthread_rwlock_init;
              pthread_rwlock_destroy;

              pthread_rwlock_rdlock;
              pthread_rwlock_wrlock;
              pthread_rwlock_unlock;

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

              作用主要是為IO操作設計.

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

            四.QT
            1.工具
              assistant  幫助文檔
              qtconfig  QT配置工具
              qmake    QT的make與項目文件智能創建工具
              uic     UI界面的設計文件的編譯工具
              moc     moc代碼創建工具
              designer  UI設計工具
            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
                
            //執行程序
                QApplication app(args,argv);  //將main的參數傳進去
                ////////////////////////////
                //在這里可以隨便創建窗體
                QDialog dlg;
                dlg.setVisible(
            true);
                
                
            ////////////////////////////    
                return app.exec();//等待所有子線程結束,才能結束
            }
            注意:  
             1.QT是C++程序.  
             2.QT程序要啟動QT的環境QApplication
             3.編程的模型
               qmake -project
               qmake *.pro
               make
               執行
            4.*.pro文件
              TEMPLATE=
                :app 應用程序
                :lib 庫
              SOURCES=
                :cpp文件1 cpp文件2 cpp文件3 ....
                :\ 續行符號
                :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.怎么學習QT 
              QT類的結構層次.
              QT的信號signal與槽slot.
              QT基本組件
              QT的UI設計器

            五.直觀認識QT
              封裝與幫助文檔的使用
              1.文檔的組成部分:
                1.模塊
                2.類作用簡單描述  
                3.頭文件
                4.父類與派生類
                5.構造器/析構器()
                6.共有函數
                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(
            "確定"));  //轉碼,防止亂碼
                
                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的界面設計器
                designer
                4.1.工具視圖:
                  用戶設計區
                  工具箱      
                  資源管理器
                  屬性編輯器(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文件
                  產生:Ui_對象名的類
                    Ui::對象名的類

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





            亚洲中文字幕无码久久综合网| 无码人妻久久一区二区三区蜜桃| 久久亚洲日韩精品一区二区三区| 狠狠色婷婷久久一区二区三区| 国产精品久久久久久久久| 91久久精品电影| 深夜久久AAAAA级毛片免费看| 日本WV一本一道久久香蕉| 久久精品国产99久久无毒不卡| 国产L精品国产亚洲区久久| 精品一二三区久久aaa片| 99久久综合国产精品二区| 日产精品久久久久久久| 国产精品成人无码久久久久久| 国产成人精品三上悠亚久久| 久久青青草原国产精品免费| 国产精品久久久久久久app| 久久九九有精品国产23百花影院| 国产99久久久国产精品小说| 国产午夜电影久久| 日韩精品久久无码人妻中文字幕| 99久久精品免费国产大片| 亚洲午夜久久久久久噜噜噜| 欧美午夜A∨大片久久 | 久久综合给合久久狠狠狠97色| 久久精品成人免费观看97| 国产国产成人精品久久| 久久精品无码专区免费青青| 亚洲国产成人精品91久久久| 99久久精品免费看国产免费| 久久99国内精品自在现线| 99精品国产99久久久久久97| 久久有码中文字幕| 久久中文精品无码中文字幕| 精品久久久久中文字| 国产精品久久久天天影视香蕉 | 久久久久一本毛久久久| 久久亚洲国产午夜精品理论片 | 精品熟女少妇AV免费久久 | 少妇被又大又粗又爽毛片久久黑人 | 久久久久亚洲AV无码专区网站|