控件之间消息传递之疑惑 我百思不得其解啊,我如何实现在两个按纽之间进行消息传递呢?我现在一个按纽里开了一个线程,我现在想按下另外一个按纽时给这个按纽传递一个按纽按下消息,让这个按纽把开的这个线程杀掉?我该怎么做呢? 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 最简单的用全局变量最合理的是用事件等同步对象线程里Waitforsingleobject(hEvent....)按钮里SetEvent(hEvent)当然,hEvent也是全局的 你能帮我把代码结构写一下吗?就是在线程里和在另外一个按纽里应该如何使用事件对象CEvent呢? 全局 HANDLE hEvent;...线程DWORD WINAPI ThreadProc(){while(WaitForSingleObject(hEvent,0) != WAIT_OBJECT_0){//do something you want}//如果跳出while循环,表示结束事件被触发return 0;}//Another button click event...SetEvent(hEvent);... 初始化,需要hEvent = CreateEvent (NULL, TRUE, FALSE, NULL); static CEvent hEvent;我加完之后上面这句代码之后,编译报错说:error C2146: syntax error : missing ';' before identifier 'hEvent'C:\vpnInit version1\vpnInitDlg.cpp(51) : fatal error C1004: unexpected end of file foundError executing cl.exe.这是怎么回事呢?我有分号为什么报错呢? 自定义消息 也可以..定义个消息,想杀的时候,给那个 按钮发这个消息,那个按钮知道了后,就杀..但是觉得给按钮弄这些操作 有些别扭..为什么给按钮控制而不是主对话框?你把这个线程交给主对话框窗口管.thread()函数也是在对话框CPP里全局定义的.按钮1是负责开启..On_button1(){creatthread();}按钮2负责关闭On_button2(){killthread();}(代码仅表意思)这挺好的? LZ 是不是有什么特殊需要和要求吗?? DWORD WINAPI ThreadProc() { while(WaitForSingleObject(hEvent,0) != WAIT_OBJECT_0) { hThread=CreateThread(NULL,0,Start,NULL,0,NULL); } TerminateThread(hThread,NULL); CloseHandle(hThread); return 0;}我在开线程的这个按纽里加了以上的代码之后报错“(246) : error C2601: 'ThreadProc' : local function definitions are illegal。这是为什么呢? 晕 确定只有这个要求..那就用我的那个代码就可以的了..主要代码罗列如下:CWinThread *pMyThread;//这个放在CPP的全局里,或者做为对话框成员也行.UINT ThreadProc(LPVOID lparam) //参数就是对话框传过来的信息,这里是对话框指针{ CMyDialog * Mydlg=(CMyDialog *)lparam; ---------------------------- 然后就是你自己监视代码;}On_Button1(){ pMyThread=::AfxBeginThread(ThreadProc,this);//在这里把对话框的指针传过去 //可以实现在线呈里也能操作对话框,或者读取数据;}OnButton2(){ if(pMyThread->m_hThread==NULL) AfxMessageBox("他自己已经关了"); else pMyThread->ExitInstance();//关闭这个线程}这样就可以了有什么问题继续问.. 无法编译通过怎么办呢?程序报错:“C:\vpnInit version1\vpnInitDlg.cpp(327) : error C2065: 'CMyDialog' : undeclared identifierC:\vpnInit version1\vpnInitDlg.cpp(327) : error C2065: 'Mydlg' : undeclared identifier”这是怎么回事呢?怎么解决呢? pMyThread=::AfxBeginThread(ThreadProc,this)这个函数里的this指的是什么呢?我窗口上面有两个按纽,一个编辑对话框,我现在是想通过按下按纽1读一个文件并且把文件的内容显示在IDC_EDIT里面,然后在这个按纽里创建一个线程,建立套接字进行监听,现在我按照你上面说的做了,但是我按下按纽1之后文件内容没显示出来,IDC_EDIT控件里面什么也没有,怎么办呢? this 是主对话框的指针,因为On_button是主对话框的函数. C++里 的语法. ...............窗口需要刷新吧..或者你可以用CString s获得一部分内容 AfxMessageBox(s)看下 是不是真的获得值了.那个线程里不是有主窗口的指针么,继续我上面的代码用 Mydlg CFile f; CString s; CString temp; f.open("1.txt",CFile::modeReadWrite) while(1){ if(!f.read(temp,5)) { s+=temp;break;} else s+=temp; }//获得文件,你实现了的话, 可以忽略掉.(Mydlg->GetDlgItem(IDC_EDIT1))->SetWindowText(s);(Mydlg->GetDlgItem(IDC_EDIT1))->UpdateWindow();} 编译运行出现了Access Violation这是怎么会事呢? emptyness(问题事小,结帐事大~) 说的很对,你把线程放在主对话框中 在编译过程中遇到的错误!!!请高手帮忙看下 Hook与热键 为什么我装不上WINDOWS MOBILE 6 PROFESSIONAL SDK? vc做网站登陆程序如何保存用户登陆信息 CList Ctrl 鼠标问题 多视图(无文档)框架,MainFrame工具栏的显示,隐藏问题 怎么获得光驱弹出和插入消息 送出200分,问一个简单问题,怎样将一个DDB位图保存到DIB位图文件里 请问怎么样才可以看得到MENU,DIALOG之类的原代码的呢? 在帮帮我 VC如何逐步显示计算结果 大家帮我想想,这SQL语句怎么写?
最合理的是用事件等同步对象
线程里Waitforsingleobject(hEvent....)按钮里SetEvent(hEvent)
当然,hEvent也是全局的
...线程
DWORD WINAPI ThreadProc()
{
while(WaitForSingleObject(hEvent,0) != WAIT_OBJECT_0)
{
//do something you want}
//如果跳出while循环,表示结束事件被触发
return 0;
}//Another button click event
...
SetEvent(hEvent);
...
hEvent = CreateEvent (NULL, TRUE, FALSE, NULL);
我加完之后上面这句代码之后,编译报错说:error C2146: syntax error : missing ';' before identifier 'hEvent'
C:\vpnInit version1\vpnInitDlg.cpp(51) : fatal error C1004: unexpected end of file found
Error executing cl.exe.
这是怎么回事呢?我有分号为什么报错呢?
定义个消息,想杀的时候,给那个 按钮发这个消息,那个按钮知道了后,就杀..但是觉得给按钮弄这些操作 有些别扭..为什么给按钮控制而不是主对话框?
你把这个线程交给主对话框窗口管.
thread()函数也是在对话框CPP里全局定义的.
按钮1是负责开启..
On_button1()
{
creatthread();
}按钮2负责关闭
On_button2()
{
killthread();
}(代码仅表意思)
这挺好的? LZ 是不是有什么特殊需要和要求吗??
{
while(WaitForSingleObject(hEvent,0) != WAIT_OBJECT_0)
{
hThread=CreateThread(NULL,0,Start,NULL,0,NULL);
}
TerminateThread(hThread,NULL);
CloseHandle(hThread);
return 0;
}
我在开线程的这个按纽里加了以上的代码之后报错“(246) : error C2601: 'ThreadProc' : local function definitions are illegal。
这是为什么呢?
那就用我的那个代码就可以的了..
主要代码罗列如下:
CWinThread *pMyThread;//这个放在CPP的全局里,或者做为对话框成员也行.UINT ThreadProc(LPVOID lparam) //参数就是对话框传过来的信息,这里是对话框指针
{
CMyDialog * Mydlg=(CMyDialog *)lparam;
----------------------------
然后就是你自己监视代码;}
On_Button1()
{
pMyThread=::AfxBeginThread(ThreadProc,this);//在这里把对话框的指针传过去
//可以实现在线呈里也能操作对话框,或者读取数据;
}
OnButton2()
{
if(pMyThread->m_hThread==NULL)
AfxMessageBox("他自己已经关了");
else
pMyThread->ExitInstance();//关闭这个线程
}
这样就可以了
有什么问题继续问..
C:\vpnInit version1\vpnInitDlg.cpp(327) : error C2065: 'Mydlg' : undeclared identifier”
这是怎么回事呢?怎么解决呢?
窗口需要刷新吧..或者你可以用CString s获得一部分内容 AfxMessageBox(s)看下 是不是真的获得值了.那个线程里不是有主窗口的指针么,继续我上面的代码用 Mydlg CFile f;
CString s;
CString temp;
f.open("1.txt",CFile::modeReadWrite)
while(1)
{
if(!f.read(temp,5))
{ s+=temp;break;}
else
s+=temp;
}
//获得文件,你实现了的话, 可以忽略掉.(Mydlg->GetDlgItem(IDC_EDIT1))->SetWindowText(s);
(Mydlg->GetDlgItem(IDC_EDIT1))->UpdateWindow();}