【问题标题】:how to pass argument to afxbeginthread如何将参数传递给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 传递参数。

标签: visual-c++ mfc dialog afx


【解决方案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 建议的方法。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-10-09
  • 2012-12-21
  • 2012-01-07
  • 2014-05-03
  • 2015-06-26
  • 2012-01-18
  • 2017-07-14
相关资源
最近更新 更多