translatemessage

时间:2024-10-28 23:42:27编辑:阿星

C++控制台程序怎样使主函数无限循环

for(;;)和while(TRUE)都是无限循环,只有break或者return跳出

PeekMessage不会阻塞,最后一个参数传PM_NOREMOVE,不会将消息从队列取出,可以用于检测消息队列是否有消息。有时候,当我们使用全局变量之类的方式进行线程间交互,PeekMessage很有用。

比如你用一个全局变量BOOL bStop表示线程是否停止,主线程bStop设为TRUE就是通知工作线程结束
if(PeekMessage(&iMsg,NULL,0,0,PM_NOREMOVE))
{
if(!GetMessage(&iMsg,NULL,0,0))
return iMsg.wParam;

TranslateMessage(&iMsg);
DispatchMessage(&iMsg);
}
else
{
if (bStop)
break;/*结束*/
}
追问:
我有一个程序是多线程,采用win32控制台程序编写,通过scoket对端口进行监听。
但是为了将程序最小化到托盘,采用了消息循环,但是不知道如何将监听的代码放到循环里,所以增加了一个线程专门用来监听。有没有更好的解决办法?
另外,消息循环放在主线程,对端口监听放在另一个线程里。采用上面哪个消息循环好。采用消息循环的目的是为了将窗口托盘化。
追答:
一般来说,你这种情况,主线程是界面线程,处理界面消息的,工作线程只用于网络相关操作,你的问题只在于主线程,如何能够响应界面上点了最小化按钮,是吧?

GetMessage后,取出了消息保存在iMsg中,DispatchMessage(&iMsg);会根据iMsg结构体保存的窗口句柄,去掉用对应的窗口消息处理函数,这个回调函数应该是你在注册窗口类时定义了的。在这个函数中,处理最小化消息。

最小化,是通过WM_SYSCOMMAND消息发送的,wParam等于SC_MINIMIZE时代表最小化


迪蒙镜面火花机

迪蒙就是英文 Diamond 的英译 意思是 钻石 的含义!

镜面火花机一般是指加工表面粗糙度值在Ra0.2um以下的数控电火花加工机床,加工表面具有镜面反光效果。镜面电火花加工主要应用于复杂模具型腔、尤其是不便于进行抛光作业的复杂曲面的精密加工,可以省去手工抛光工序,提高零件的使用性能,对缩短模具制造周期,具有十分重要的实际意义。


C++怎么让这段程序循环执行??

#include
void main()
{
while(1)
{
float a,b,c;
cout<<"Enter the gallons used (-1 to end ):";
cin>>a;
if(a==-1)
cout<<"The overall average Miles/Gallon was 21.601423";
else
cout<<"Enter the miles driven:";
cin>>b;
c=b/a;
cout<<"The MIles / Gallon for this tank was "<<c<<endl;
}

}不过这样的死循环哦,就是一直循环不停的意思,如果需要其他功能以后再跟我说


上一篇:花儿旅行家

下一篇:没有了