WaitForSingleObject用INFINITE 等不到event ,永远挂起,你可以让主线程SetEvent(handle)来通知事件激发,使其返回。或者改造你的程序,用下面的方式
HANDLE m_Event[2];
m_Event[0] = CreateEvent(NULL, FALSE, FALSE, NULL);
m_Event[1] = CreateEvent(NULL, FALSE, FALSE, NULL);
这样,你可以用m_Event[0] 来表示退出事件,m_Event[1]来表示你现在的handle
然后用WaitForMultipleObjects(2,m_Event, FALSE, INFINITE),第三个参数为不等待所有信号,即等待任何一个激发信号都可以返回,这样,你线程函数如下使用,只要2个event任何一个激发,你都可以检查状态,是退出或者等到对象
DWORD dr;
while (true)
{
dr = WaitForMultipleObjects(2,m_Event, FALSE, INFINITE);
switch (dr)
{
case WAIT_OBJECT_0://退出线程
return 0;
case WAIT_OBJECT_0+1://这里等同于你WaitForSingleObject的处理
//
break;
}
}
这样你主线程想结束线程时,只要SetEvent(m_Event[0] );线程就退出了
//mainc
#include "ah"
int main()
{
a();
}//ah
void a();//ac
#include "ah"
void a()
{
//do sth
}
就是酱紫
把你要调用的函数都封装起来,即函数定义
function
[A,B,]=先写一个函数(a,b,)
function
body
主程序function调用;
end
function
[A,B,]=主程序(a,b,)
function
body
先写一个函数function调用
end
这样子按你要求实现看起来代码会有点乱乱,不便于调试
其实你想实现递归调用,建议不要见主程序封装成函数,直接在第一个函数中具体化则能在“先写一个函数”中调用其自身,如下:
function
[A,B,]=先写一个函数(a,b,)
function
body
for
other
codes;
function
body
for
主程序body;
先写一个函数();
end
注意使用功能封装,其能把复杂的东西简单化,慢慢体会吧,其是程序设计中很不错的思想。
你可以这样做,在你的子函数定义中加一个输入变量x作为你需要的那个参数。
在主函数的循环中加入条件
if第一次循环的话,x = [];
然后在你的子函数中写
if isempty(x)
x = 一个数。%初始化
end
这样第一次运行的时候不会受影响。以后的循环x就作为你的计算结果传递给子函数了。
把p!='\0'改成p!='\0'。但change写得太乱了,如下就可以了:
char change(charp){int i,j,c;
for(j=0;p[j];j++);
for(i=0,j--;i<j;i++,j--)
c=p[i],p[i]=p[j],p[j]=c;
return p;
}
以上就是关于VC 如果在关闭程序时调用主程序函数全部的内容,包括:VC 如果在关闭程序时调用主程序函数、单片机程序:怎么把几个c文件在主函数中调用、MATLAB里面如何写入函数和调用函数等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)