windows api 多线程-子线程阻塞来调用定时器确保定时函数完成

问题描述

子线程阻塞来调用定时器确保定时函数完成

小弟是在初始化一个窗口的时候创建了一个子线程,在这个子线程里面调用对了一个定时器来定时检测一些信息,然后将检测的结果返回给该线程处理,然后将处理结果在主线程里面和用户交互,现在是发现定时器的那个定时执行的函数不工作,在设置定时器下面用一个MessageBox阻塞一下,定时执行的函数就工作,但是其他组的线程的办法貌似不行,求指点,部分代码如下

unsigned int _stdcall Thread1(LPVOID)
{

HANDLE g_hEvent;
g_hEvent = CreateEvent(NULL,TRUE,FALSE,NULL);
ResetEvent(g_hEvent);
SetTimer(NULL,0,5000,Timer1);
//MessageBox(NULL,TEXT("test"),TEXT("11"),MB_OK);//阻塞线程才能让timer运行,用waitformultipleobjects或者waitforsingleobject
//SuspendThread(hThread1);
//Sleep(5000);
WaitForSingleObject(g_hEvent,INFINITE);//线程无法阻塞,没有运行完settimer就返回了
return 0;

}

BOOL Main_OnInitDialog(HWND hwnd, HWND hwndFocus, LPARAM lParam)
{
UINT uId;
//HANDLE g_hEvent = CreateEvent(NULL,FALSE,FALSE,NULL);
hThread1 = (HANDLE)_beginthreadex(NULL,0,Thread1,NULL,0,&uId);
return TRUE;
}

时间: 2024-11-08 19:52:08

windows api 多线程-子线程阻塞来调用定时器确保定时函数完成的相关文章

python调用windows api锁定计算机示例_python

调用Windows API锁定计算机 本来想用Python32直接调用,可是没有发现Python32有Windows API LockWorkStation(); 因此,就直接调用Windows DLL了 复制代码 代码如下: #!/usr/bin/env python#-*- coding:cp936 -*- "调用WindowAPI锁定计算机" import ctypes; dll = ctypes.WinDLL('user32.dll'); dll.LockWorkStation

java编程中主线程子线程交替问题分析

问题:子线程循环 10 次,接着主线程循环 100 次,接着又回到子线程循环 10 次,接着再回到主线程又循环 100 次,如此循环50次. 分析:这个实际上是很简单的问题,即子线程run,主线程阻塞--->子线程阻塞,主线程run,能够使线程阻塞的方法有很多,最常见的是sleep与wait:当然,需要控制的话,用wait/notify.子线程与主线程共同操作一个Resource 对象,而Resource对象中由两个方法分别实现子线程与主线程的操作对象 代码如下: package treadga

iOS多线程的初步研究(四、五、六)--NSTimer--NSURLConnection子线程中运行 ---- NSOperation

iOS多线程的初步研究(四)-- NSTimer 理解run loop后,才能彻底理解NSTimer的实现原理,也就是说NSTimer实际上依赖run loop实现的. 先看看NSTimer的两个常用方法: + (NSTimer *)timerWithTimeInterval:(NSTimeInterval)ti target:(id)aTarget selector:(SEL)aSelector userInfo:(id)userInfo repeats:(BOOL)yesOrNo; //生成

windows lua 多线程 线程同步

今天在改一个程序,改成部分逻辑用lua写,这个程序是多线程的.将程序中部分逻辑改成lua之后,各种非法访问内存错误,各种奇奇怪怪的问题,不分时间,不分地点的出现崩溃.从调用堆栈来看,基本都是使用lua造成的.在多线程中使用lua_newthread得到的lus_State仍然有时候程序会崩溃.基本上可以确定为多线程中操作lua 的问题了. 前几天我转载的一篇文章,文章写了关于lua多线程的作法.作法有二 1.每一个线程函数用lua_newthread产生一个新的lua_state 以后对lua操

windows主线程如何等待子线程结束

问题描述 windows主线程如何等待子线程结束 我在主线程中起了多个子线程,想等所有子线程结束主线程再继续做后面的事情. 但是我自起子线程的函数下面用WaitForMultipleObjects等待所有子线程结束,会阻塞主线程导致程序无反应死掉. 请各位大侠帮忙看下应该如何处理? 解决方案 WaitForMultipleObjects 确实会阻塞主线程的,不想阻塞主线程就只能自己实现,使用事件或者其它类似的机制. 系统没有现成的,只能自己使用线程间通讯的机制来实现. 解决方案二: MsgWai

重新想象 Windows 8 Store Apps (47) - 多线程之线程同步: Semaphore, CountdownEvent, Barrier, ManualResetEvent, AutoResetEvent

原文:重新想象 Windows 8 Store Apps (47) - 多线程之线程同步: Semaphore, CountdownEvent, Barrier, ManualResetEvent, AutoResetEvent [源码下载] 重新想象 Windows 8 Store Apps (47) - 多线程之线程同步: Semaphore, CountdownEvent, Barrier, ManualResetEvent, AutoResetEvent 作者:webabcd 介绍重新想

重新想象 Windows 8 Store Apps (46) - 多线程之线程同步: Lock, Monitor, Interlocked, Mutex, ReaderWriterLock

原文:重新想象 Windows 8 Store Apps (46) - 多线程之线程同步: Lock, Monitor, Interlocked, Mutex, ReaderWriterLock [源码下载] 重新想象 Windows 8 Store Apps (46) - 多线程之线程同步: Lock, Monitor, Interlocked, Mutex, ReaderWriterLock 作者:webabcd 介绍重新想象 Windows 8 Store Apps 之 线程同步 lock

详解Java多线程编程中LockSupport类的线程阻塞用法_java

LockSupport是用来创建锁和其他同步类的基本线程阻塞原语. LockSupport中的park() 和 unpark() 的作用分别是阻塞线程和解除阻塞线程,而且park()和unpark()不会遇到"Thread.suspend 和 Thread.resume所可能引发的死锁"问题. 因为park() 和 unpark()有许可的存在:调用 park() 的线程和另一个试图将其 unpark() 的线程之间的竞争将保持活性. 基本用法LockSupport 很类似于二元信号量

C#调用windows api的要点

window     在.Net Framework SDK文档中,关于调用Windows API的指示比较零散,并且其中稍全面一点的是针对Visual Basic .net讲述的.本文将C#中调用API的要点汇集如下,希望给未在C#中使用过API的朋友一点帮助.另外如果安装了Visual Studio .net的话,在C:\Program Files\Microsoft Visual Studio .NET\FrameworkSDK\Samples\Technologies\Interop\P