Проблема с _beginthreadex, используемым с классом MFC
Невозможно использовать _beginthreadex в MFC, выдавая ошибку как ошибку C3861: '_beginthreadex': идентификатор не найден. Beginthreadex работает нормально без кода MFC.
Редактировать: проблема была с последовательностью включения файла, и нужно было использовать _beginthreadex
// EventsHandshakeDlg.cpp : implementation file
//
#include <crtdefs.h>
#include <process.h>
#include"windowsx.h"
#include "stdafx.h"
unsigned int __stdcall/*AFX_THREADPROC*/ /*__cdecl*/ Server(void *iData)
{
}
// CEventsHandshakeDlg dialogCEventsHandshakeDlg::CEventsHandshakeDlg(CWnd* pParent /*=NULL*/)
: CDialog(CEventsHandshakeDlg::IDD, pParent)
{
m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);
}
BEGIN_MESSAGE_MAP(CEventsHandshakeDlg, CDialog)
ON_WM_SYSCOMMAND()
ON_WM_PAINT()
ON_WM_QUERYDRAGICON()
//}}AFX_MSG_MAP
ON_BN_CLICKED(IDC_BTN_REVERSE, &CEventsHandshakeDlg::OnBnClickedBtnReverse)
END_MESSAGE_MAP()
// CEventsHandshakeDlg message handlers
BOOL CEventsHandshakeDlg::OnInitDialog()
{
// TODO: Add extra initialization here
return TRUE; // return TRUE unless you set the focus to a control
}
void CEventsHandshakeDlg::OnBnClickedBtnReverse()
{unsigned int threadId = 0;
HANDLE Thread =(HANDLE)_beginthreadex(
NULL,
NULL,
&/*CEventsHandshakeDlg::*/Server/*(void *iData)*/,
NULL,
0,
&threadId
);
}
1 ответ
Решение
Обычно AfxBeginThread()
используется в MFC. Вы уверены, что вам нужно _beginthreadex()
? Все ваши параметры кажутся значениями по умолчанию.
Вы можете проверить порядок вашего #includes
и содержание stdafx.h
и / или проверьте ваши каталоги включения. Вы также должны включить <process.h>
после stdafx.h
, Это может исправить это.