界面卡死咋办?多线程来帮忙!

2024-02-06 15:58

本文主要是介绍界面卡死咋办?多线程来帮忙!,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

      写了个超级简单的软件,界面如下:

      

      1. 单线程:

//---------------------------------------------------------------------------#include <vcl.h>
#pragma hdrstop#include "Unit1.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner): TForm(Owner)
{
}
//---------------------------------------------------------------------------void __fastcall TForm1::Button1Click(TObject *Sender)
{int i, j;int n = 1;for(i = 0; i < 30000; i++){for(j = 0; j < 30000; j++){n = -n;}}ShowMessage(IntToStr(n));
}
//---------------------------------------------------------------------------

      点击按钮后,好卡。

 

      2. 多线程:

//---------------------------------------------------------------------------#include <vcl.h>
#pragma hdrstop#include "Unit1.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner): TForm(Owner)
{
}DWORD WINAPI fun(LPVOID lp)
{int i, j;int n = 1;for(i = 0; i < 30000; i++){for(j = 0; j < 30000; j++){n = -n;}}ShowMessage(IntToStr(n));return 0;
}//---------------------------------------------------------------------------void __fastcall TForm1::Button1Click(TObject *Sender)
{HANDLE h = CreateThread(NULL, 0, fun, NULL, 0, NULL);CloseHandle(h);
}
//---------------------------------------------------------------------------

      点击按钮后,不卡。
 

      有多线程就是好啊!睡觉去。

 

这篇关于界面卡死咋办?多线程来帮忙!的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/684822

相关文章

Android多线程下载见解

通过for循环开启N个线程,这是多线程,但每次循环都new一个线程肯定很耗内存的。那可以改用线程池来。 就以我个人对多线程下载的理解是开启一个线程后: 1.通过HttpUrlConnection对象获取要下载文件的总长度 2.通过RandomAccessFile流对象在本地创建一个跟远程文件长度一样大小的空文件。 3.通过文件总长度/线程个数=得到每个线程大概要下载的量(线程块大小)。

【Qt6.3 基础教程 17】 Qt布局管理详解:创建直观和响应式UI界面

文章目录 前言布局管理的基础为什么需要布局管理器? 盒布局:水平和垂直排列小部件示例:创建水平盒布局 栅格布局:在网格中对齐小部件示例:创建栅格布局 表单布局:为表单创建标签和字段示例:创建表单布局 调整空间和伸缩性示例:增加弹性空间 总结 前言 当您开始使用Qt设计用户界面(UI)时,理解布局管理是至关重要的。布局管理不仅关系到UI的外观,更直接影响用户交互的体验。本篇博

物联网系统运维——移动电商应用发布,Tomcat应用服务器,实验CentOS 7安装JDK与Tomcat,配置Tomcat Web管理界面

一.Tomcat应用服务器 1.Tomcat介绍 Tomcat是- -个免费的开源的Ser Ivet容器,它是Apache基金会的Jakarta 项目中的一个核心项目,由Apache, Sun和其他一 些公司及个人共同开发而成。Tomcat是一一个小型的轻量级应用服务器,在中小型系统和并发访问用户不是很多的场合下被普遍使用,是开发和调试JSP程序的首选。 在Tomcat中,应用程序的成部署很简

如何在Android中实现多线程与线程池?

目录 一、Android介绍二、什么是多线程三、什么是线程池四、如何在Android中实现多线程与线程池 一、Android介绍 Android是一种基于Linux内核的开源操作系统,由Google公司领导开发。它最初于2007年发布,旨在为移动设备提供一种统一、可扩展的操作系统。Android系统以其高度的可定制性和丰富的应用生态而受到广泛欢迎,如今已经成为全球最流行的

C#界面动态布局 界面控件随着界面大小尺寸变化而变化

要想写一个漂亮的界面,光靠利用Anchor和Dock属性是远远不够的,我们需要用到相对布局,就是不管窗口大小怎么变化,控件相对父控件的相对位置保持不变。可惜c#里没有提供按照百分比布局。所以只能自己再resize()事件里调整控件位置。 首先在窗体的构造函数里保存父窗体的长宽,以及每个控件的X,Y坐标的相对位置:  int count = this.Controls.Count * 2 + 2;

【c2】编译预处理,gdb,makefile,文件,多线程,动静态库

文章目录 1.编译预处理:C源程序 - 编译预处理【#开头指令和特殊符号进行处理,删除程序中注释和多余空白行】- 编译2.gdb调试:多进/线程中无法用3.makefile文件:make是一个解释makefile中指令的命令工具4.文件:fprint/fgets/fwrite/fread,ftell/rewind/fseek/fflush4.1 文本文件:FILE结构体4.2 二进制文件:没

vue+elementui搭建后台管理界面(5递归生成侧栏路由) vue定义定义多级路由菜单

有一个菜单树,顶层菜单下面有多个子菜单,子菜单下还有子菜单。。。 这时候就要用递归处理 1 定义多级菜单 修改 src/router/index.js 的 / 路由 {path: '/',redirect: '/dashboard',name: 'Container',component: Container,children: [{path: 'dashboard', name: '首

多线程简单运用---时钟的实现

效果图:   代码: package game;import java.awt.BorderLayout;import java.awt.Color;import java.awt.Container;import java.awt.Font;import java.awt.event.ActionEvent;import java.awt.event.ActionListe

多线程的简单应用----彩票摇号器

效果图:   package game;import java.awt.BorderLayout;import java.awt.Container;import java.awt.event.ActionEvent;import java.awt.event.ActionListener;import java.util.Random;import javax.swing.JBu

通过简单的售票程序理解多线程

售票程序要求:1:多个窗口同时卖票  2:同一编号的票的不能多次卖出   错误程序解析: public class TicketDemo {public static void main(String[] args) {Ticket t1=new Ticket("窗口1:");Ticket t2=new Ticket("窗口2:");Ticket t3=new Ticket("窗口3