Apple 4 months ago
parent
commit
80b01afb35

+ 2 - 2
CMakeLists.txt

@@ -144,8 +144,8 @@ file(GLOB GLOBAL_SRC
 # add_subdirectory(${CMAKE_SOURCE_DIR}/demo/http)
 # add_subdirectory(${CMAKE_SOURCE_DIR}/demo/threadPool)
 # add_subdirectory(${CMAKE_SOURCE_DIR}/demo/ftp)
-# add_subdirectory(${CMAKE_SOURCE_DIR}/demo/OneThread)
+add_subdirectory(${CMAKE_SOURCE_DIR}/demo/OneThread)
 # add_subdirectory(${CMAKE_SOURCE_DIR}/demo/timer)
 # add_subdirectory(${CMAKE_SOURCE_DIR}/demo/time)
-add_subdirectory(${CMAKE_SOURCE_DIR}/demo/VideoPlayer)
+# add_subdirectory(${CMAKE_SOURCE_DIR}/demo/VideoPlayer)
 

+ 6 - 2
demo/OneThread/widget.cpp

@@ -30,6 +30,11 @@ Widget::~Widget()
     delete ui;
 }
 
+void Widget::print2(const QString& str, const char* str2, const char* str3, const char* str4, const char* str5)
+{
+    SPDLOG_INFO("{} {} {} {} {}", str.toStdString(), str2, str3, str4, str5);
+}
+
 void print(const QString& str, const char* str2, const char* str3, const char* str4, const char* str5)
 {
     SPDLOG_INFO("{}", str.toStdString());
@@ -44,8 +49,7 @@ void Widget::on_pBtn_connect_clicked()
 {
     SPDLOG_INFO("点击了“连接按钮”");
     qDebug() << "main Thread ID: " << QThread::currentThreadId();
-    auto task = m_oneThread->bindTask(print, "Hello ", "World ", "this ", "is ", "Qt");
-    emit m_oneThread->signal_runTask(task);
+    m_oneThread->addTaskRunOne(&Widget::print2, this, "Hello ", "World ", "this ", "is ", "Qt");
 }
 
 void Widget::on_pBtn_downloadFile_clicked()

+ 2 - 0
demo/OneThread/widget.h

@@ -19,6 +19,8 @@ public:
     Widget(QWidget *parent = nullptr);
     ~Widget();
 
+    void print2(const QString& str, const char* str2, const char* str3, const char* str4, const char* str5);
+
 private slots:
 
     void on_pBtn_connect_clicked();

+ 21 - 2
demo/VideoPlayer/VideoPlayer/DecodeVedio.cpp

@@ -696,12 +696,27 @@ void DecodeVedio::decodeUsingCPU()
         SPDLOG_ERROR("创建pFrameRGB错误");
         return;
     }
-    /* 创建环形队列 */
+    /* 设置环形队列的大小 */
     m_ringQueue.setQueueSize(30);
 
-    /******** 读取数据包 av_read_frame ********/
     while(m_isRunning)
     {
+        /******** 读取数据包 av_read_frame ********/
+        int retRead = av_read_frame(m_pFormatContext, packet);
+        if(retRead == AVERROR_EOF)
+        {
+            /* 读取到末尾后,需要传入一个空的packet,才能读取到最后几帧 */
+            avcodec_send_packet(m_pCodecCtx, packet);
+        }
+        else if(retRead < 0)
+        {
+            SPDLOG_ERROR("读取帧错误...");
+            break;
+        }
+        else
+        {
+        
+        }
 
         /* 发送给解码器 avcodec_send_packet */
 
@@ -709,6 +724,10 @@ void DecodeVedio::decodeUsingCPU()
 
         /* 转换解码后的帧格式,转换成RGBA格式,Qt可以识别 */
     }
+    /* 释放空间 */
+    av_packet_free(&packet);
+    av_free(pFrameSRC);
+    av_free(pFrameRGB);
 }
 
 /* 退出线程,将所有可能暂停线程运行的条件全部唤醒 */

+ 2 - 0
demo/threadPool/CMakeLists.txt

@@ -12,6 +12,7 @@ include_directories(
     ${CMAKE_CURRENT_SOURCE_DIR}
 
     ${CMAKE_SOURCE_DIR}/External/common/Logs
+    ${CMAKE_SOURCE_DIR}/External/common
 )
 
 #包含源文件,GLOB_RECURSE是不可缺少的
@@ -19,6 +20,7 @@ file(GLOB  LOCAL_SRC
 ${CMAKE_CURRENT_SOURCE_DIR}/*.cpp
 
     ${CMAKE_SOURCE_DIR}/External/common/Logs/*.cpp
+    ${CMAKE_SOURCE_DIR}/External/common/ThreadPool/*.cpp
 )
 
 

+ 18 - 10
demo/threadPool/main.cpp

@@ -11,7 +11,7 @@
 #include <cmath>
 #include <list>
 #include <iterator>
-#include "ThreadPool.h"
+#include "ThreadPool/ThreadPool.h"
 
 #include "loginit.h"
 #include "spdlog/spdlog.h"
@@ -54,21 +54,29 @@ int main(int argc, char *argv[])
 
     SPDLOG_LOGGER_DEBUG(logger,"***** 开始给线程添加任务 ******\n");
 
+    CPPTP.add_task([&](){
+        while (true)
+        {
+            SPDLOG_LOGGER_INFO(logger,"这是一个无参数的任务");
+            std::this_thread::sleep_for(std::chrono::seconds(1));
+        }
+    });
+
     // for (int i = 0; i < 20; i++)
     // {
     //     tp.add_Task(print, i);
     //     std::this_thread::sleep_for(std::chrono::microseconds(100));
     // }
-    std::vector<std::future<int>> vec;
-    for(int i = 0; i < 20; i++)
-    {
-        vec.emplace_back(tp.add_task_with_ret(ret_print, i));
-    }
+    // std::vector<std::future<int>> vec;
+    // for(int i = 0; i < 20; i++)
+    // {
+    //     vec.emplace_back(tp.add_task_with_ret(ret_print, i));
+    // }
 
-    for(auto& it : vec)
-    {
-        SPDLOG_LOGGER_DEBUG(logger,"返回值:{}", it.get());
-    }
+    // for(auto& it : vec)
+    // {
+    //     SPDLOG_LOGGER_DEBUG(logger,"返回值:{}", it.get());
+    // }
 
     while(getchar() != 'q')
     {