我用一个bool变量来改变,但是好像是因为循环的过程一直在执行,bottom按了第一次之后就不再响应了,而且整个exe好像也死了。不知到有什么方法来实现这样的过程。
解决方案 »
- 这种按钮怎么做,有代码吗?
- 程序的虚拟内存占用过高,能否将其降低?
- 共用体类型,现在还有用吗?还有学习它的必要吗? 共用体是多个成员共享内存,据说这种类型,是计算机发展初期,内存价格高,处处想到节省内存而设计出的一种 数据类型,
- 有没办法让VC6可以使用MFC 7.0?
- 对CImage::GetImageInfo 获得的位图直接操作却看不到效果?请问誰了解这个函数?谢谢
- 怎么用代码改变about对话框的标题栏?甚至是里面的static框的文字?
- 有关进度条的问题
- 如何禁用局域网网卡? 急~~~~~~~~~~~~~~~~~~~~~~`
- 下面线程同步//lock与unlock不成对出现怎么也不报错?
- 用VC连接Oracle数据库,必须采用Thin的方法,可以吗?
- 一个趣味题目
- ATL转换宏的问题
void CCCDApplicationDlg::OnBnClickedButtonContinue()
{
// TODO: 在此添加控件通知处理程序代码
//if(m_hCcdDevice == NULL)
//{
// MessageBox(_T("警告:没有正确打开数据采集卡!"),_T("系统警告"),MB_OK);
// return;
//}
DWORD returnCode;
CString str; BFlagcontinue=!BFlagcontinue; if(BFlagcontinue)
{GetDlgItem(IDC_BUTTON_CONTINUE)->SetWindowText(_T("停止"));}
else
{GetDlgItem(IDC_BUTTON_CONTINUE)->SetWindowText(_T("连续采集"));} while(BFlagcontinue)
{
if(BFlagcontinue)
{
if((returnCode=lcDataAcquisition(m_hCcdDevice,iCCDData))!=0)
{
str.Format(_T("设备故障: 0x%x"),returnCode);
MessageBox(str,_T("采集失败"),MB_OK);
return;
}
}
else
{
return;
}
}; return;
}
UINT ThreadFunction(LPVOID lpvoid);在你的程序里面调用,线程就创建好了,优先级和安全性这些参数可以参见MSDN
CWinThread * thread = AfxBeginThread(ThreadFunction, this);线程函数的定义
UINT ThreadFunction(LPVOID lpvoid)
{
这里把lpvoid转换成你自己的类指针就可以编程了.
把while循环放在此处...
}
个人觉得楼主的基础比较差的话,先不要接触线程,用计时器代替,会比较简单
SetTimer(1, 延迟毫秒数, NULL);然后加入对话框的OnTimer消息处理,把按钮里面的代码转移到OnTimer,while循环去掉
MSG message;
while(1){
if(::PeekMessage(&message, NULL, 0, 0, PM_REMOVE)) {
::TranslateMessage(&message);
::DispatchMessage(&message);
}
}
这样就可以响应按钮消息了
你看看这篇文章
http://blog.csdn.net/xianglitian/article/details/6729851