简单的方法就是设置一个全局变量flag = 0;
void OnButton1()
{
if(flag == 0)
{
SetTimer();
return;
}
flag = 0;
killtimer()
int a;
}
OnTimer()
{
flag = 1;
OnButton1();
}
------------------------
只是讲个思路,代码并不全
只是大概表示一下,应该能看明白吧?
语言表达还要麻烦些
首先强调一点:你这里有主线程和和新建线程,它们都存在于你这个程序的进程里,这个问题没涉及主进程、子进程什么的,进程和线程的概念千万别弄混。
即使新建线程没用Sleep函数,界面照样不能即时响应新建线程更新界面的 *** 作。Windows的线程可分为UI线程和工作线程,主线程是UI线程,负责一切响应用户输入和绘制窗口界面的人机交互工作,新建的线程是工作线程,只负责运算,不处理人机交互。所以何时响应界面的更新绘制是由你的主线程决定的,如果主线程还在执行某个函数而没有回到消息循环,就不能更新界面,啥时候那个函数执行完了就可以更新界面了。
防止线程被打断,是线程同步问题,与这里的问题没啥关系。Windows提供了一系列的线程同步API,你可以使用像自旋锁、临界区、Slim读写锁、条件变量这样的用户级线程同步API,也可以使用事件、信号量、互斥量这样的内核同步对象。具体的原理和使用方法不是三言两语能说清楚的,你可以阅读 *** 作系统教材和《Windows核心编程》中讲解多线程的章节。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)