关于MFC调用线程的问题,在线等答案! 本帖最后由 yingxiake 于 2012-08-12 16:14:15 编辑 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 HANDLE CreateThread( LPSECURITY_ATTRIBUTES lpThreadAttributes, // SD SIZE_T dwStackSize, // initial stack size LPTHREAD_START_ROUTINE lpStartAddress, // thread function LPVOID lpParameter, // thread argument DWORD dwCreationFlags, // creation option LPDWORD lpThreadId // thread identifier);通过参数lpParameter传参进去 我就是那样传进去,还是同样的问题,create函数出错了。 我也试过在线程外面create也不行,轮到sr.LoadCrammarFile( L"grammar.xml" );这个函数出现问题了运行的时候 UINT CTestDlg::start(LPVOID lpParam){// CTestDlg * a=(CTestDlg *)lpParam; CSR * sr=(CSR *)lpParam; // a->SetDlgItemText(IDC_1,_T("关闭线程")); //语音部分 CString s; while(1) { //sr->Create(); sr->LoadCrammarFile( L"grammar.xml" ); sr->StartReco(); sr->ProcessReco(1500); if ( sr->IsRecoEnd() && sr->IsRecoSuccess() ) { char temp[128]; sr->GetRecoWordA( temp ); s = temp; if ( s == "启动") { // a->m_edit=s; // a->UpdateData(FALSE); AfxMessageBox ( "小车即将启动" ); } else if ( s == "下一页" ) { // a->m_edit=s; // a->UpdateData(FALSE); AfxMessageBox ( "小车即将停止" ); } ...}void CTestDlg::On1() { // TODO: Add your control notification handler code here if(run) { run=FALSE; } else { run=TRUE; CSR k; k.Create(); //k.LoadCrammarFile( L"grammar.xml" ); AfxBeginThread(start,&k); }} 这个是我不能成功调用create()函数的原因吗??怎样才算直接操作控件呢!!?^-^ 你说的问题太模糊了, 你是说想在子线程中操作主线程传入的一人对象吧, 有些跨线程操作是会引起失败的,Winsocket就是个例子1.建议子线程给主线程发消息的方式,在主线程中触发完成你想要的操作2.操作主线程控件可能通过主线程的指针(在子线程中定义一个指向主线程的指针,启动子线程的时候,把主线程指针赋给它),也可直接通过传参数的方式把主线程指针通到子线程,同时也可通过给主线程发消息的方式,能过消息触发主线程完成相应的操作 ><继续坐等答案呢!!! mfc子窗体OnSize后,最小化还原,控件全没了 用api函数,载位图总是不成功 请高手指点我的微小项目 利用VC++获取IIS中的配置信息 调试问题? 关于图文混排,用什么控件好 请问如何在公共对话框控件中提取多个文件名称 ?help me !!!!!!!!!!!! 请各路高手赐教 怎么修改这种状态下的文件!!!! 一个也许挺简单的问题。另外《深入浅出MFC》第二版在北京哪儿有卖? 请教C++ 调用第三方DLL 如何写调用其中函数? 请问大家:我在VC6.0下写程序,编译没问题,运行出现下面问题,是什么原因?
SIZE_T dwStackSize, // initial stack size
LPTHREAD_START_ROUTINE lpStartAddress, // thread function
LPVOID lpParameter, // thread argument
DWORD dwCreationFlags, // creation option
LPDWORD lpThreadId // thread identifier);
通过参数lpParameter传参进去
我就是那样传进去,还是同样的问题,create函数出错了。
我也试过在线程外面create也不行,轮到sr.LoadCrammarFile( L"grammar.xml" );
这个函数出现问题了运行的时候
UINT CTestDlg::start(LPVOID lpParam)
{
// CTestDlg * a=(CTestDlg *)lpParam;
CSR * sr=(CSR *)lpParam;
// a->SetDlgItemText(IDC_1,_T("关闭线程"));
//语音部分
CString s; while(1)
{
//sr->Create();
sr->LoadCrammarFile( L"grammar.xml" );
sr->StartReco();
sr->ProcessReco(1500);
if ( sr->IsRecoEnd() && sr->IsRecoSuccess() )
{
char temp[128];
sr->GetRecoWordA( temp );
s = temp;
if ( s == "启动")
{
// a->m_edit=s;
// a->UpdateData(FALSE);
AfxMessageBox ( "小车即将启动" );
}
else if ( s == "下一页" )
{
// a->m_edit=s;
// a->UpdateData(FALSE);
AfxMessageBox ( "小车即将停止" ); }
...
}
void CTestDlg::On1()
{
// TODO: Add your control notification handler code here
if(run)
{
run=FALSE;
}
else
{
run=TRUE;
CSR k;
k.Create();
//k.LoadCrammarFile( L"grammar.xml" );
AfxBeginThread(start,&k);
}
}
这个是我不能成功调用create()函数的原因吗??怎样才算直接操作控件呢!!?^-^
2.操作主线程控件可能通过主线程的指针(在子线程中定义一个指向主线程的指针,启动子线程的时候,把主线程指针赋给它),也可直接通过传参数的方式把主线程指针通到子线程,同时也可通过给主线程发消息的方式,能过消息触发主线程完成相应的操作