如何将参数传递给afxbeginthread
Posted
技术标签:
【中文标题】如何将参数传递给afxbeginthread【英文标题】:how to pass argument to afxbeginthread 【发布时间】:2014-05-22 05:02:24 【问题描述】:我正在使用 afxbeginthread 运行一个无模式对话框。我创建了一个从 Cwinthread 派生的新类,并重写了 initinstance,如下所示。
BOOL GuiThread::InitInstance(void)
CWinThread::InitInstance();
dialog *dial = new dialog;
this->m_pMainWnd = dial;
dial->Create(dialog::IDD);
dial->ShowWindow(SW_SHOWNORMAL);
return TRUE;
在我的主线程中,我正在创建一个用户界面线程,如下所示。
GuiThread *gui = (GuiThread*)AfxBeginThread(RUNTIME_CLASS(GuiThread),THREAD_PRIORITY_NORMAL,0,NULL,NULL);
WaitForSingleObject(gui->m_hThread,INFINITE);
我的问题是:如何将参数传递给 GUI 线程?我想传递一个字符串:我该怎么做?
【问题讨论】:
您可以将自定义消息发送到gui->m_pMainWnd
,并在dialog
类中处理。通过 LPARAM 和 WPARAM 传递参数。
【参考方案1】:
可以使用CREATE_SUSPENDED标志在不启动线程的情况下创建线程对象,然后设置线程对象的成员变量并启动线程:
GuiThread *gui = (GuiThread*)AfxBeginThread(RUNTIME_CLASS(GuiThread),THREAD_PRIORITY_NORMAL,0,CREATE_SUSPENDED,NULL);
gui->m_sometext = sometext;
gui->ResumeThread();
【讨论】:
不错的答案。谢谢你。但是,如果我想在线程启动后更新 m_sometext 怎么办。我可以暂停我的线程,更新变量并再次恢复线程。好吗?注意:我正在使用这个线程来运行无模式对话框。 不,这不是在两个线程之间同步访问数据的适当方式。两个线程都应该在 EnterCriticalSection 和 LeaveCriticalSection 调用之间夹住对共享数据的访问。您也可以采用 Alex Farber 建议的方法。以上是关于如何将参数传递给afxbeginthread的主要内容,如果未能解决你的问题,请参考以下文章