我按照孙鑫老师的15课多线程聊天室的做法,将线程函数设置为静态,但是在使用的时候遇到了问题。
比如我要在线程函数中初始化套接字,也就是每创建一个线程都创建单独的套接字,编译时发现不能在静态的线程函数中使用 InitSocket() 函数!
因为InitSocket是非静态成员函数。
而且在静态的线程函数内也无法使用如GetDlgItemText之类的成员,不知道有没有什么好的解决方法?如果把线程函数设置为非静态的全局函数,同样报错
'CreateThread' : cannot convert parameter 3 from 'unsigned long (void *)' to 'unsigned long (__stdcall *)(void *)';
比如我要在线程函数中初始化套接字,也就是每创建一个线程都创建单独的套接字,编译时发现不能在静态的线程函数中使用 InitSocket() 函数!
因为InitSocket是非静态成员函数。
而且在静态的线程函数内也无法使用如GetDlgItemText之类的成员,不知道有没有什么好的解决方法?如果把线程函数设置为非静态的全局函数,同样报错
'CreateThread' : cannot convert parameter 3 from 'unsigned long (void *)' to 'unsigned long (__stdcall *)(void *)';
{
public:
void startThread()
{
DWORD dwThreadID = 0;
CreateThread(NULL, 0L, Thread, this, 0L, &dwThreadID);
}
static DWORD __stdcall Thread(LPVOID lParam)
{
A *p = (A*)lParam;
if (p)
p->ThreadWork();
}
void ThreadWork(){};
};注意:MFC的程序在Thread不要对界面的进行直接的操作。
我想通过for循环来创建多个线程,控件里有多少列就创建多少个线程。当我点开始的时候,首先获得行里的用户名和密码,然后创建线程,初始化套接字,然后把用户名和密码发送到服务器。遇到到问题是:1.线程函数如果为静态的话,无法在子进程内操作CListCtrl控件内地ITEM?
2.如果把进程函数设置为全局函数,该如何传值?比如目前正在处理的行数
3.初始化套接字是不是应该放在子进程内?目的是每个套接字发送一行用户数据。以前写PHP的,刚接触VC,所以请大家多多包涵,苦于问路无门,如果可以一对一的指导,定酬谢!
1和2,我想1楼和2楼已经说清楚了,如果看不懂建议先看点基础的东西。初始化套接字可以放在子线程里。