等待线程结束

Win32线程——等待另一个线程结束 《Win32多线程程序设计》–Jim Beveridge & Robert Wiener “等待某个什么东西”是线程常常需要做的事。等待是线程的“必要之恶”。 如果你没有等待线程结束就莽撞地结束程序,线程会被系统强制结束掉——在它完成它的工作之前。 由于让线程停工是操作系统的责任,很合理地我们会认为操作系统也有责任让其他线程知道某个线程停工了。 Sleep()这个函数要求操作系统中止 阅读详情

今天在调试一个多线程的程序时一直出问题,具体情况是这样的

我在程序的开始执行一个线程,线程一直执行,知道程序结束时才结束,所以我的程序在结束时要等待线程结束再结束自己。

正在装载数据……
我后来发现了问题,修改后就ok了,我把修改后的大致代码帖出:

UINT IsPress(LPVOID lpParam)
{
 CCapAndRecordDlg * pDlg = NULL;
 pDlg = (CCapAndRecordDlg *)lpParam;
 if (pDlg==NULL)
 {
  return 1;
 }
 g_bQuit = false;
 UINT nBt[6] = {IDC_LEFT,IDC_RIGHT,IDC_UP,IDC_DOWN,IDC_FAR,IDC_NEAR}; //几个按纽id
 int nRun[6] = {0};            //该动作是否在做
 int nPressCount[6] = {0};     //按纽检测到按的次数
 CSingleLock lock(&g_quitEvent);
 while (1)
 {
   
  if (lock.Lock(20))  //是否退出,
  {
   g_bQuit = true;
   lock.Unlock();
   return 1;
  }
  lock.Unlock();
   //do what you do
 }

return 0;
}

//====

//主程序
OnClose()
{
//do what U want
 g_quitEvent.SetEvent();
 Sleep(200);
 while (!g_bQuit)  //等待线程,这是在线程退出是置true的
 {
  g_quitEvent.SetEvent();
                //以下的作用是可能结束程序时,可能还要做别的操作,而它又未结束,
  MSG msg;
  while(PeekMessage(&msg,NULL,0,0,PM_REMOVE))
  {
   ::TranslateMessage(&msg);
   ::DispatchMessage(&msg);
  }
 }
 TRACE("/n----out exe-----/n");
 CDialog::OnClose();
}

我一直出问题的地方就是没加

MSG msg;
  while(PeekMessage(&msg,NULL,NULL,NULL,PM_REMOVE))
  {
   ::TranslateMessage(&msg);
   ::DispatchMessage(&msg);
  }
因为我在结束程序前有一个OnExit里面是对退出时的用户进行身份验证,用到了数据库操作,

手把手教你用野火FPGA开发板资料包安装ModelSim 10.5se(附破解教程) 本文提供了一份详细的指南,手把手教你为野火FPGA开发板安装和配置ModelSim 10.5se仿真工具。内容涵盖从前期准备、软件安装、许可证激活(学习用途)到环境验证的全过程,并简要介绍了如何与Xilinx Vivado开发套件集成,帮助初学者快速搭建稳定的FPGA仿真环境。 阅读详情

相关推荐

CoaXPress协议入门(1)---- CXP测试套件

CoaXPress (简称CXP)是指一种采用同轴线缆进行互联的相机数据传输标准,主要用于替代之前的Camera Link协议,常见于科学相机、工业相机、医学图像、航空防务等场景。CXP是一个非对称的高速点对点串行传输协议,主要用于传输视频和静态图像,线缆多使用单条或多条同轴电缆。CXP易于集成,可以获得灵活可靠的性能,通过使用标准的同轴线缆,比如RG59 和 RG6规格(推荐使用RG6),并且图像、控制通讯、触发、电源都可以使用同一条线缆。

素手挽剑 9509

等待线程结束,然后结束程序

今天在调试一个多线程的程序时一直出问题,具体情况是这样的我在程序的开始执行一个线程,线程一直执行,知道程序结束时才结束,所以我的程序在结束时要等待线程结束再结束自己。我后来发现了问题,修改后就ok了,我把修改后的大致代码帖出:UINT IsPress(LPVOID lpParam){ CCapAndRecordDlg * pDlg = NULL; pDlg = (CCapAndRecordDlg

1162

Unity ProBuilder(自己创建斜面、拐角)

ProBuilder基础实例

weixin_56537692的博客 1551

Java线程系列:线程状态的转换

一、线程状态 线程的状态转换是线程控制的基础。线程状态总的可分为五大状态:分别是生、死、可运行、运行、等待/阻塞。 用一个图来描述如下: 1、新状态:线程对象已经创建,还没有在其上调用start()方法。 2、可运行状态:当线程有资格运行,但调度程序还没有把它选定为运行线程时线程所处的状态。当start()方法调用时,线程首先进入可运行状态。在线程运行之后或者从阻塞、等待或睡眠状态回来后,也返回...

qianlia的博客 1045

中国IP发展之面面观

谢学军/邱善勤2006-1-25 9:29:28电子经理世界       IP远没有我们当初想象的那么简单   当SoC设计方法学刚刚传到国内的时候,学界为之欢呼雀跃,由于IP/SoC设计技术的使用,可以将发达国家用几年甚至十几年积累起来的设计技术直接为我所用,使中国的集成电路跳过漫长的积累阶段,迅速站到较高的起点上。因此在当时看来,IP/SoC设计技术是我国提升设计水平、发展

klxdmm305的专栏 1188

电池管理系统(BMS)系列—状态估计之SOH

BMS系列文章,介绍了SOH估计

zxx52113140的博客 1846

线程转换状态,傻傻分不清等待和阻塞吗?你还在暴力的停止线程吗?

线程创建之后,调用start()方法开始运行。当线程执行wait()方法之后,线程进入等待状态。进入等待状态的线程需要依靠其他线程的通知才能够返回到运行状态,而超时等待状态相当于在等待状态的基础上增加了超时限制,也就是超时时间到达时将会返回到运行状态。当线程调用同步方法时,在没有获取到锁的情况下,线程将会进入到阻塞状态。线程在执行Runnable的run()方法之后将会进入到终止状态。Java将操作系统中的运行和就绪两个状态合并称为运行状态。阻塞状态是线程。

qq_52988841的博客 3130

anaconda安装-超详细版

文章目录一、anaconda安装1.1 anaconda安装地址1.2 安装详细步骤检验安装是否成功更改conda源(后续安装第三方库可以加快速度) 一、anaconda安装 Anaconda 是一个用于科学计算的 Python 发行版,支持 Linux, Mac, Windows, 包含了众多流行的科学计算、数据分析的 Python 包。装anaconda,就不需要单独装python了。 anaconda优点: 1、anaconda里面集成了很多关于python科学计算的第三方库,主要是安装方便,而p

in546的博客 25万+

Java的6种线程状态以及线程状态的转换

详细介绍了Java线程的6种状态,以及状态之间的转换。

终生学习践行者 8137

工业界实战:小红书推荐系统中的AB测试策略解析——分层、Holdout与反转实验

本文深入解析了小红书推荐系统在工业界实践中采用的AB测试核心策略。重点阐述了分层实验如何解决多实验并行与干扰问题,Holdout机制如何作为评估黄金标准提供稳定基准,以及反转实验如何作为全量上线后的终极安全网进行风险控制。这些策略共同构成了科学、严谨的线上评估体系,是保障推荐系统迭代效果与决策质量的关键。

transformer2023的博客 476

别再搞混了!用示波器实测SVPWM:相电压、线电压、端电压波形到底长啥样?(附TI/ST官方笔记解读)

本文详细解析了SVPWM波形实测中的相电压、线电压和端电压的区别与测量技巧,结合TI/ST官方笔记,揭示了马鞍形波形的形成原理及常见误区。通过示波器实测案例,帮助电力电子工程师准确理解并应用这些关键概念,提升电机控制系统的调试效率。

weixin_30632883的博客 431

线程的等待线程结束(join)和谦让(yield)是什么情况?

前言 本文隶属于专栏《100个问题搞定Java并发》,该专栏为笔者原创,引用请注明来源,不足和错误之处请在评论区帮忙指出,谢谢! 本专栏目录结构和参考文献请见100个问题搞定Java并发 正文 为什么需要 join? 在很多情况下,线程之间的协作和人与人之间的协作非常类似。 一种非常常见的合作方式就是分工合作。 以我们非常熟悉的软件开发为例,在一个项目进行时,总是应该有几位号称是“需求分析师”的同事,先对系统的需求和功能点进行整理和总结,以书面形式给出份需求说明或者类似的参考文档,然后,软件设计师、研发

Shockang的博客 3万+

2026美赛数学建模竞赛 MCM C题:与星共舞的数据 问题一 粉丝投票估计模型 详细解题思路和代码

2026美赛数学建模竞赛 MCM C题:与星共舞的数据 问题一 粉丝投票估计模型 详细解题思路和代码.。开发一个(或多个)数学模型,用于估算每位选手在他们参赛的各周的粉丝投票数(这是未知且严格保密的)。您的模型是否能正确估算出导致每周淘汰结果一致的粉丝投票数?提供一致性度量。您估算出的粉丝投票总数有多少确定性?这种确定性对于每位选手/每周是否总是相同?为您的估算提供确定性度量。

YOLO 852

python等待所有线程结束_线程池如何等待所有线程执行结束

internal sealed class AClass{public int Method(int num){Thread.Sleep(1000);return num * num;}public void UsingCallback(int numToDo){int[] squares = new int[numToDo];AutoResetEvent done = new AutoRese...

weixin_39582724的博客 3106

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

python等待所有线程结束_Python多线程:主线程等待所有子线程结束代码

我就废话不多说了,还是直接看代码吧!from time import ctimeimport threadingimport timedef a():#for i in range(5):print('Program a is running... at ', ctime(),u'.线程名为:',threading.current_thread().name )time.sleep(0.2)def...

weixin_39630735的博客 1910

深度学习工具包 DeepLearningToolbox

深度学习工具包Deprecation notice.-----This toolbox is outdated and no longer maintained.There are much better tools available for deep learning than this toolbox, e.g. [Theano](http://deeplearning.net/software/theano/), [torch](http://torch.ch/) or [tensorflow](http://www.tensorflow.org/)I would suggest you use one of the tools mentioned above rather than use this toolbox.Best, Rasmus.DeepLearnToolbox================A Matlab toolbox for Deep Learning.Deep Learning is a new subfield of machine learning that focuses on learning deep hierarchical models of data.It is inspired by the human brain's apparent deep (layered, hierarchical) architecture.A good overview of the theory of Deep Learning theory is[Learning Deep Architectures for AI](http://www.iro.umontreal.ca/~bengioy/papers/ftml_book.pdf)For a more informal introduction, see the following videos by Geoffrey Hinton and Andrew Ng.* [The Next Generation of Neural Networks](http://www.youtube.com/watch?v=AyzOUbkUf3M) (Hinton, 2007)* [Recent Developments in Deep Learning](http://www.youtube.com/watch?v=VdIURAu1-aU) (Hinton, 2010)* [Unsupervised Feature Learning and Deep Learning](http://www.youtube.com/watch?v=ZmNOAtZIgIk) (Ng, 2011)If you use this toolbox in your research please cite [Prediction as a candidate for learning deep hierarchical models of data](http://www2.imm.dtu.dk/pubdb/views/publication_details.php?id=6284)```@MASTERSTHESIS\{IMM2012-06284, author = "R. B. Palm", title = "Prediction as a candidate for learning deep hierarchical models of data", year = "2012",}```Contact: rasmusbergpalm at gmail dot comDirectories included in the toolbox-----------------------------------`NN/` - A library for Feedforward Backpropagation Neural Networks`CNN/` - A library for Convolutional Neural Networks`DBN/` - A library for Deep Belief Networks`SAE/` - A library for Stacked Auto-Encoders`CAE/` - A library for Convolutional Auto-Encoders`util/` - Utility functions used by the libraries`data/` - Data used by the examples`tests/` - unit tests to verify toolbox is workingFor references on each library check REFS.mdSetup-----1. Download.2. addpath(genpath('DeepLearnToolbox'));Example: Deep Belief Network---------------------```matlabfunction test_example_DBNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit RBM and visualize its weightsrand('state',0)dbn.sizes = [100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);figure; visualize(dbn.rbm{1}.W'); % Visualize the RBM weights%% ex2 train a 100-100 hidden unit DBN and use its weights to initialize a NNrand('state',0)%train dbndbn.sizes = [100 100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);%unfold dbn to nnnn = dbnunfoldtonn(dbn, 10);nn.activation_function = 'sigm';%train nnopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.10, 'Too big error');```Example: Stacked Auto-Encoders---------------------```matlabfunction test_example_SAEload mnist_uint8;train_x = double(train_x)/255;test_x = double(test_x)/255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit SDAE and use it to initialize a FFNN% Setup and train a stacked denoising autoencoder (SDAE)rand('state',0)sae = saesetup([784 100]);sae.ae{1}.activation_function = 'sigm';sae.ae{1}.learningRate = 1;sae.ae{1}.inputZeroMaskedFraction = 0.5;opts.numepochs = 1;opts.batchsize = 100;sae = saetrain(sae, train_x, opts);visualize(sae.ae{1}.W{1}(:,2:end)')% Use the SDAE to initialize a FFNNnn = nnsetup([784 100 10]);nn.activation_function = 'sigm';nn.learningRate = 1;nn.W{1} = sae.ae{1}.W{1};% Train the FFNNopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.16, 'Too big error');```Example: Convolutional Neural Nets---------------------```matlabfunction test_example_CNNload mnist_uint8;train_x = double(reshape(train_x',28,28,60000))/255;test_x = double(reshape(test_x',28,28,10000))/255;train_y = double(train_y');test_y = double(test_y');%% ex1 Train a 6c-2s-12c-2s Convolutional neural network %will run 1 epoch in about 200 second and get around 11% error. %With 100 epochs you'll get around 1.2% errorrand('state',0)cnn.layers = { struct('type', 'i') %input layer struct('type', 'c', 'outputmaps', 6, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %sub sampling layer struct('type', 'c', 'outputmaps', 12, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %subsampling layer};cnn = cnnsetup(cnn, train_x, train_y);opts.alpha = 1;opts.batchsize = 50;opts.numepochs = 1;cnn = cnntrain(cnn, train_x, train_y, opts);[er, bad] = cnntest(cnn, test_x, test_y);%plot mean squared errorfigure; plot(cnn.rL);assert(er<0.12, 'Too big error');```Example: Neural Networks---------------------```matlabfunction test_example_NNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);% normalize[train_x, mu, sigma] = zscore(train_x);test_x = normalize(test_x, mu, sigma);%% ex1 vanilla neural netrand('state',0)nn = nnsetup([784 100 10]);opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samples[nn, L] = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.08, 'Too big error');%% ex2 neural net with L2 weight decayrand('state',0)nn = nnsetup([784 100 10]);nn.weightPenaltyL2 = 1e-4; % L2 weight decayopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex3 neural net with dropoutrand('state',0)nn = nnsetup([784 100 10]);nn.dropoutFraction = 0.5; % Dropout fraction opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex4 neural net with sigmoid activation functionrand('state',0)nn = nnsetup([784 100 10]);nn.activation_function = 'sigm'; % Sigmoid activation functionnn.learningRate = 1; % Sigm require a lower learning rateopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex5 plotting functionalityrand('state',0)nn = nnsetup([784 20 10]);opts.numepochs = 5; % Number of full sweeps through datann.output = 'softmax'; % use softmax outputopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex6 neural net with sigmoid activation and plotting of validation and training error% split training data into training and validation datavx = train_x(1:10000,:);tx = train_x(10001:end,:);vy = train_y(1:10000,:);ty = train_y(10001:end,:);rand('state',0)nn = nnsetup([784 20 10]); nn.output = 'softmax'; % use softmax outputopts.numepochs = 5; % Number of full sweeps through dataopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, tx, ty, opts, vx, vy); % nntrain takes validation set as last two arguments (optionally)[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');```[![Bitdeli Badge](https://d2weczhvl823v0.cloudfront.net/rasmusbergpalm/deeplearntoolbox/trend.png)](https://bitdeli.com/free "Bitdeli Badge")

Java多线程之----主线程会等待子线程结束再结束么,怎么让主线程等待子线程结束呐?

首先给出结论: 主线程和子线程之间没有谁先谁后结束这种关联,它们只是各自负责自己的线程任务,如果该线程的任务结束了,该线程自然会结束运行。 talk is cheap,show me the code and the result 1.先来一个好理解的: 下面这个例子中,由于子线程循环了100次,干的活多,走的慢,所以结束的晚。可以看到执行结果,主线程结束后,子线程稍等了一会才结束执行,并没有主线程需要等待子线程结束的情况。 主线程的任务: 1.thread.start 开启子线程 2.System.o

stay hungry,stay foolish! 7480

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

主线程等待所有子线程结束的4种方法

主线程等待所有子线程结束的4种方法,包括使用`CountDownLatch`、`CyclicBarrier`、`Future.get()`、`Completable.allOf()`。

qq_40774600的博客 6904

c++主线程等待子线程结束_主线程等待子线程结束的多种方法

程的运行时间”。while循环对于“主线程如何获取子线程总运行时间”的问题,最开始想到的是使用while循环进行轮询:Thread t = new Thread(() -> {//子线程进行字符串连接操作int num = 1000;String s = "";for (int i = 0; i < num; i++) {s += "Java";}System.out.println(...

weixin_39629129的博客 3104

线程结束等待与线程优先级

一、线程等待: 有两种方法可以判定一个线程是否结束。 第一,可以在线程中调用isAlive()。这种方法由Thread定义,它的通常形式如下: final boolean isAlive( ) 如果所调用线程仍在运行,isAlive()方法返回true,如果不是则返回false。 但isAlive()很少用到,等待线程结束的更常用的方法是调用join(),描述如下: final voi

sxb956347789的博客 344

线程池等待所有线程结束

ArrayList<Integer> integers = new ArrayList<>(); ThreadPoolExecutor executor = ThreadPoolUtils.init(); for (int i = 0; i < 10; i++) { executor.execute(new Add(i, integers)); } if(!executor.isShut..

cc 1368

java主线程等待线程池结束_Java主线程等待子线程、线程池

public class TestThread extends Thread{public void run(){System.out.println(this.getName() + "子线程开始");try{// 子线程休眠五秒Thread.sleep(5000);}catch (InterruptedException e){e.printStackTrace();}System.out.p...

weixin_36214783的博客 1591

java 等待子线程结束_Java如何等待子线程执行结束

本程序的数据有可能是如下:mainthread work startsubthread start working.mainthread work done.nowwaiting sub thread done.subthread stop working.nowall done.忽略标号, 当然输出也有可能是1和2调换位置了. 这个我们是无法控制的. 我们看下线程的join操作, 究竟干了什么....

weixin_35422230的博客 783

java 等待线程结束_java中等待所有线程都执行结束

使用CountDownLatch,这其实是最优雅的写法了,每个线程完成后都去将计数器减一,最后完成时再来唤醒@Testpublic void testThreadSync3() {final Vector list = new Vector();Thread[] threads = new Thread[TEST_THREAD_COUNT];final CountDownLatch latch =...

weixin_39625468的博客 198

python 主程序等待 子线程_Python多线程中主线程等待所有子线程结束的方法

Python多线程中主线程等待所有子线程结束的方法发布时间:2020-07-30 14:39:04来源:亿速云阅读:77作者:小猪这篇文章主要讲解了Python多线程中主线程等待所有子线程结束的方法,内容清晰明了,对此有兴趣的小伙伴可以学习一下,相信大家阅读完之后会有帮助。我就废话不多说了,还是直接看代码吧!from time import ctimeimport threadingimport ...

weixin_39541693的博客 4282

Java线程池关闭、等待、线程结束与JVM退出

线程池关闭后的操作执行结果 / 线程池关闭方式对正在执行任务的影响没有影响线程会被中断是否丢弃队列中的任务不丢弃丢弃是否等待存量任务执行完毕不等待不等待使用 awaitTermination() 方法等待结束的任务范围正在执行的任务 + 队列中的任务正在执行的任务继续执行任务使用拒绝策略处理任务使用拒绝策略处理任务活跃线程结束方式任务执行完毕后结束1. 线程被中断后结束2. 任务执行完毕后结束空闲线程结束方式线程被中断后结束线程被中断后结束。

adrninistrat0r的博客 2007

Linux系统编程(17)——线程控制-结束线程、等待线程、线程分离

结束线程 1.让线程的入口函数结束执行------最常见最主要使用的结束方式 2.pthread_exit:让本线程结束------但是很少使用它,它的参数是 void* 表示线程结束的返回结果(很少用到);如果exit 全部线程都没了,这个不能混淆了。exit 结束进程。 void* ThreadEntry(void* arg) { //新线程入口,参数 (void)arg; ...

陌上人如玉,公子世无双。 712
上一篇: MFC中获取主窗口指针
下一篇: WaitForSingleObject的用法
WaveYang
博客等级 码龄22年 14粉丝 13原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值