如何将参数传递给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的主要内容,如果未能解决你的问题,请参考以下文章

如何将参数传递给进程

如何通过反射将参数传递给方法

如何将参数传递给 erlang os:cmd()?

如何使用 SwiftUI 将参数传递给 Button 的操作

如何将两个参数传递给 Pool.starmap()?

如何将参数传递给 JSP 组件?