test_basic.cpp 4.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156
  1. // 基础设施测试程序
  2. #include "code/base/logger.h"
  3. #include "code/base/media_thread_base.h"
  4. #include "code/base/media_common.h"
  5. #include <iostream>
  6. #include <thread>
  7. #include <chrono>
  8. using namespace av;
  9. // 测试线程类
  10. class TestThread : public ThreadBase {
  11. public:
  12. TestThread() {
  13. setThreadName("TestThread");
  14. }
  15. protected:
  16. void run() override {
  17. AV_LOGGER_INFO("Test thread started");
  18. for (int i = 0; i < 10 && !shouldExit(); ++i) {
  19. AV_LOGGER_INFOF("Test thread iteration: {}", i);
  20. if (!waitForMs(100)) {
  21. break; // 收到退出信号
  22. }
  23. }
  24. AV_LOGGER_INFO("Test thread finished");
  25. }
  26. };
  27. int main() {
  28. std::cout << "=== AV基础设施测试 ===" << std::endl;
  29. // 1. 测试日志系统
  30. std::cout << "1. 测试日志系统..." << std::endl;
  31. Logger::initialize("test_log.txt", LogLevel::DEBUG, false, true);
  32. AV_LOGGER_DEBUG("这是一条调试信息");
  33. AV_LOGGER_INFO("这是一条信息");
  34. AV_LOGGER_WARNING("这是一条警告");
  35. AV_LOGGER_ERROR("这是一条错误");
  36. AV_LOGGER_INFOF("格式化日志测试: {} + {} = {}", 1, 2, 3);
  37. // 2. 测试时间工具
  38. std::cout << "2. 测试时间工具..." << std::endl;
  39. {
  40. AV_SCOPED_TIMER("测试代码块");
  41. std::this_thread::sleep_for(std::chrono::milliseconds(50));
  42. }
  43. time_utils::Timer timer;
  44. timer.start();
  45. std::this_thread::sleep_for(std::chrono::milliseconds(100));
  46. timer.stop();
  47. AV_LOGGER_INFOF("计时器测试: {} ms", timer.elapsedMs());
  48. // 3. 测试字符串工具
  49. std::cout << "3. 测试字符串工具..." << std::endl;
  50. std::string testStr = " Hello, World! ";
  51. AV_LOGGER_INFOF("原始字符串: '{}'", testStr);
  52. AV_LOGGER_INFOF("修剪后: '{}'", string_utils::trim(testStr));
  53. AV_LOGGER_INFOF("转大写: '{}'", string_utils::toUpper(testStr));
  54. auto parts = string_utils::split("a,b,c,d", ',');
  55. AV_LOGGER_INFOF("分割结果数量: {}", parts.size());
  56. // 4. 测试路径工具
  57. std::cout << "4. 测试路径工具..." << std::endl;
  58. std::string path = "C:/test/file.txt";
  59. AV_LOGGER_INFOF("路径: {}", path);
  60. AV_LOGGER_INFOF("目录: {}", path_utils::getDirectory(path));
  61. AV_LOGGER_INFOF("文件名: {}", path_utils::getFilename(path));
  62. AV_LOGGER_INFOF("扩展名: {}", path_utils::getExtension(path));
  63. // 5. 测试线程基类
  64. std::cout << "5. 测试线程基类..." << std::endl;
  65. {
  66. TestThread testThread;
  67. testThread.setOnStarted([]() {
  68. AV_LOGGER_INFO("线程启动回调被调用");
  69. });
  70. testThread.setOnFinished([]() {
  71. AV_LOGGER_INFO("线程完成回调被调用");
  72. });
  73. AV_LOGGER_INFO("启动测试线程...");
  74. if (testThread.start()) {
  75. AV_LOGGER_INFO("测试线程启动成功");
  76. // 让线程运行一段时间
  77. std::this_thread::sleep_for(std::chrono::milliseconds(300));
  78. AV_LOGGER_INFO("停止测试线程...");
  79. testThread.stop();
  80. testThread.join();
  81. AV_LOGGER_INFO("测试线程已停止");
  82. } else {
  83. AV_LOGGER_ERROR("测试线程启动失败");
  84. }
  85. }
  86. // 6. 测试工作线程
  87. std::cout << "6. 测试工作线程..." << std::endl;
  88. {
  89. int counter = 0;
  90. auto worker = makeWorkerThread([&counter]() {
  91. counter++;
  92. AV_LOGGER_INFOF("工作线程计数: {}", counter);
  93. }, 50);
  94. worker->setThreadName("WorkerThread");
  95. worker->start();
  96. std::this_thread::sleep_for(std::chrono::milliseconds(200));
  97. worker->stop();
  98. worker->join();
  99. AV_LOGGER_INFOF("工作线程最终计数: {}", counter);
  100. }
  101. // 7. 测试内存池
  102. std::cout << "7. 测试内存池..." << std::endl;
  103. {
  104. memory_utils::MemoryPool pool(64, 10);
  105. std::vector<void*> ptrs;
  106. for (int i = 0; i < 5; ++i) {
  107. void* ptr = pool.allocate();
  108. if (ptr) {
  109. ptrs.push_back(ptr);
  110. AV_LOGGER_INFOF("分配内存块 {}", i);
  111. }
  112. }
  113. AV_LOGGER_INFOF("剩余可用块: {}", pool.getAvailableBlocks());
  114. for (void* ptr : ptrs) {
  115. pool.deallocate(ptr);
  116. }
  117. AV_LOGGER_INFOF("释放后可用块: {}", pool.getAvailableBlocks());
  118. }
  119. AV_LOGGER_INFO("=== 所有测试完成 ===");
  120. std::cout << "测试完成,请查看 test_log.txt 文件" << std::endl;
  121. return 0;
  122. }