1、c++
#include <iostream>
#include <opencv2/opencv.hpp>
#include <string>
#include <thread>
#include <atomic>
using namespace std;
const int NUM_THREADS = 1; // 线程数量
std::atomic<int> frameCounts[NUM_THREADS]; // 每个线程的帧计数
std::atomic<bool> running(true); // 控制定时器的运行状态
std::mutex printMutex;
// 定时器函数,记录每个线程的FPS
void timer(int threadIndex) {
while (running) {
// 等待1秒
std::this_thread::sleep_for(std::chrono::seconds(1));
// 打印并重置当前线程的帧数
int fps = frameCounts[threadIndex].exchange(0);
{
std::lock_guard<std::mutex> lock(printMutex);
std::cout << "Thread " << threadIndex << " FPS: " << fps << std::endl;
}
}
}
int main() {
std::thread t(timer, 0);
t.detach();
while (true) {
frameCounts[0]++;
}
system("pause");
return 0;
}
输出:
2、Python
from multiprocessing import Process, Lock, Value
import time
class Timer(Process):
def __init__(self, lock, crt_time, last_time):
super().__init__()
self.current_time = current_time
self.last_time = last_time
self.lock = lock
def run(self):
while True:
# 等待1s
time.sleep(1)
with self.lock:
self.last_time.value = self.current_time.value
print('----------num----------:', self.last_time.value)
self.current_time.value = 0
if __name__ == '__main__':
lock = Lock()
# 使用 Value 创建共享变量
current_time = Value('i', 0) # 'i' 表示整数类型
last_time = Value('i', 0)
timer = Timer(lock, current_time, last_time)
timer.start()
while True:
with lock:
timer.current_time.value += 1
输出: