VC 如果在关闭程序时调用主程序函数

VC 如果在关闭程序时调用主程序函数,第1张

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里面如何写入函数和调用函数等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zz/10625174.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-10
下一篇 2023-05-10

发表评论

登录后才能评论

评论列表(0条)

保存