代码拉取完成,页面将自动刷新
#include "include.h"
Particle particles[1024 * 16]; // 懒得去malloc了 反正半中间还有新加粒子
GtkWidget *drawing_area; // 绘图区域指针
float xa_g = 0; // 环境重力
float ya_g = 0; // 环境重力
int par_num = PAR_NUM; // 粒子数量
pthread_mutex_t th_mutex[TH_MAX]; // 计算加速度线程 同步 互斥锁
pthread_cond_t th_cond[TH_MAX]; // 计算加速度线程 同步 信号
volatile int th_flag[TH_MAX]; // 计算加速度线程 同步 标志
pthread_mutex_t mutex0 = PTHREAD_MUTEX_INITIALIZER; // 计算速度位置线程 同步 互斥锁
pthread_cond_t cond0 = PTHREAD_COND_INITIALIZER; // 计算速度位置线程 同步 信号
volatile int flag0 = 0; // 计算速度位置线程 同步 标志
volatile unsigned int run_cnt0 = 0; // 计算速度位置线程 计数
int th_num = TH_NUM;
long new_time, old_time = 0;
gboolean update_fps(gpointer data)
{
struct timeval currentTime;
float time_dx;
float accurate_fps;
gettimeofday(¤tTime, NULL); // 获取当前时间
new_time = currentTime.tv_sec * 1000 + currentTime.tv_usec / 1000; // 计算毫秒
if (old_time == 0) // 如果时第一次运行
{
old_time = new_time - 1000;
}
time_dx = (float)(new_time - old_time) / 1000; // 计算两次之间的时间
accurate_fps = run_cnt0 / time_dx;
printf("fps:%03.1f\n", accurate_fps);
run_cnt0 = 0;
old_time = new_time;
return G_SOURCE_CONTINUE;
}
int main(int argc, char *argv[])
{
if (argc >= 2)
{
th_num = atoi(argv[1]); // 从命令行参数中获取线程数量
}
printf("th_num:%d\n", th_num);
par_num -= par_num % th_num; // 根据线程数量调整参数数量
par_init(); // 初始化参数
gtk_ui_init(argc, argv); // 主UI初始化
thread_init(); // 多线程初始化
gtk_main(); // 进入GTK主循环
return 0;
}
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。