建立的语句:
void CClientDlg::OnBtsendcmd()
....
....
m_pThread = AfxBeginThread(
ThreadProc,
(LPVOID) pParam,
THREAD_PRIORITY_NORMAL,
0,
CREATE_SUSPENDED,
NULL);
....
线程函数:
UINT CClientDlg::ThreadProc( LPVOID pParam )编译时的错误信息:G:\0dayz\client\clientDlg.cpp(374) : error C2665: 'AfxBeginThread' : none of the 2 overloads can convert parameter 1 from type 'unsigned int (void *)'请问如何解决???谢谢。。
void CClientDlg::OnBtsendcmd()
....
....
m_pThread = AfxBeginThread(
ThreadProc,
(LPVOID) pParam,
THREAD_PRIORITY_NORMAL,
0,
CREATE_SUSPENDED,
NULL);
....
线程函数:
UINT CClientDlg::ThreadProc( LPVOID pParam )编译时的错误信息:G:\0dayz\client\clientDlg.cpp(374) : error C2665: 'AfxBeginThread' : none of the 2 overloads can convert parameter 1 from type 'unsigned int (void *)'请问如何解决???谢谢。。
static UINT ThreadProc( LPVOID pParam );
UINT ThreadProc(LPVOID pParam)
class CMainDlg : public CDialog
{
public:
UINT SendWorker(LPVOID pParam);
...
加上static或者把函数放到类外面来。
主线程1是通信程序,接收对方的信息后,开一个子线程2,将信息写入文件。1 2
... create(suspend)
... |
recv. |
resumethread |
recv write
recv write
recv write所以主线程需要传递文件名,文件长度给子线程。
然后主线程继续收,子线程继续写,(因为文件一次传不完)
主线程在这个过程中是把cBuf一次一次送到环形队列BUF,
子线程从BUF一次一次取,然后写。改成static好像就不能从BUF取了,似乎
{
public:
....
该传一个什么指针进去
创建线程:
DWORD dwThread;
HANDLE hThread;
hThread = CreateThread(NULL, 0, (LPTHREAD_START_ROUTINE)ComThreadFunc, this, 0, &dwThread);
CloseHandle(hThread);线程:
DWORD ComThreadFunc(LPVOID pvVoid)
{
CMainDlg *sss=(CMainDlg *)pvVoid;
.....
}
看来很具有代表性
头文件的定义:DWORD WINAPI ComputeThreadProc(LPVOID *pParam);线程函数:
DWORD WINAPI ComputeThreadProc(LPVOID *pParam)
{
while(1){}
return 0;}
创建线程:
CreateThread(NULL,0,(LPTHREAD_START_ROUTINE)ComputeThreadProc,(void *)this,0,&idThread);
错误:
error C2440: 'type cast' : cannot convert from '' to 'unsigned long (__stdcall *)(void *)'
None of the functions with this name in scope match the target type
大伙的意思是不是在头文件定义的前面加一个static
class CMainDlg : public CDialog
{
public:
UINT SendWorker(LPVOID pParam);
...
这样这个函数还是CMainDlg类的成员函数
你应该写成这样
class CMainDlg : public CDialog
{
public:
...
}
UINT SendWorker(LPVOID pParam);