×牛人请进——类的线程函数能不能设置成静态的? 如果一个类的线程函数设置成非静态,用CreateThread创建线程的时候编译老是通过不了,为什么??如果我不想设置成静态的可以么 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 http://msdn.microsoft.com/library/chs/default.asp?url=/library/CHS/vccore/html/_core_multithreading_with_c.2b2b_.and_mfc.asp 必须是静态的吧?如果是普通的类成员函数的话使用的不是stdcall怎么编译得通过嘛. 顺便说一下.如果用了CRT的话,创建线程最好用_beginthread 看它的线程函数规范来写通常就是COPY,只改名字这样的MS已做好规则(指函数的声明)的最好不要改动,另外可见到很多类似的函数:如LRESULT CALLBACK WndProc(HWND hWnd,UINT iMessage,WPARAM wParam,LPARAM lParam)或LPCTSTR AFXAPI AfxRegisterWndClass( UINT nClassStyle, HCURSOR hCursor = 0, HBRUSH hbrBackground = 0, HICON hIcon = 0 ); MFC里面启动线程最好用AfxBeginThread,它对MFC做了优化。线程函数声明为静态的,比较符合OOP的思想。一般是设计一个成员函数作为线程执行实体,一个启动线程的静态成员函数,在静态成员函数里面调用实体函数。这样很方便。 说到底是因为类的自身的原因,因为class 多自带了this 这个参数,而且默认是当作变量传给函数的,这样你在类内写线程函数的时候,传进去的参数是有问题的,具体的你可以看候杰的win32多线程编程这本书,非常详细 用CreateThread创建线程时,线程函数是必须存在的,也就是说,你必须能取到它的地址,这样线程才能知道到哪里去调用线程函数.全局函数和静态函数在编译时已经分配了地址,而类的非静态成员函数要等到实例化后才能取到地址. 谢谢大家的回答如果设置成静态的话,线程函数为整个类公用也就是说各个对象访问线程函数(或者说是创建线程)的话,访问的是不是同一个地址?需不需要同步?另外问一个题外话,怎么关闭csdn的声音——很烦人的,叮咚叮咚的! 如果有共享变量时,当然要同步保护。题外话:我还不知道CSDN有 叮咚叮咚,噪音扰民这回事, 木钱买耳机。 线程函数要么是类static类型,要么是全局csdn有那个声音,是因为你有短消息,注意看一下 线程入口函数肯定是静态或全局的.如果你写了个线程类,并希望能象CWnd::WindowProc重载的话?你就要为该类写一个全局线程入口函数. 传入参数为该类指针不就行了 CListCtrl做出漂亮的界面CHeaderCtrlCl实现文件 关于保存问题 listBox控件的问题 请教一个问题,我要做一个能统计击键次数的(MFC)小东西 有什么方法可以精确实现睡眠1毫秒(甚至更小) 如何隐藏菜单 请问高手们,怎样才能打印listBox里的数据(在线等待,马上给分) 求绿色版MSDN eVC中必须用UNICODE?真可爱! 编程者的困惑 从ini读取值,赋给check box,combo box然后再显示的问题 问一个位图的问题。
如果是普通的类成员函数的话使用的不是stdcall
怎么编译得通过嘛.
如果用了CRT的话,创建线程最好用_beginthread
通常就是COPY,只改名字这样的MS已做好规则(指函数的声明)的最好不要改动,
另外可见到很多类似的函数:
如LRESULT CALLBACK WndProc(HWND hWnd,UINT iMessage,WPARAM wParam,LPARAM lParam)
或LPCTSTR AFXAPI AfxRegisterWndClass(
UINT nClassStyle,
HCURSOR hCursor = 0,
HBRUSH hbrBackground = 0,
HICON hIcon = 0
);
线程函数声明为静态的,比较符合OOP的思想。
一般是设计一个成员函数作为线程执行实体,一个启动线程的静态成员函数,
在静态成员函数里面调用实体函数。这样很方便。
如果设置成静态的话,线程函数为整个类公用
也就是说各个对象访问线程函数(或者说是创建线程)的话,
访问的是不是同一个地址?需不需要同步?另外问一个题外话,怎么关闭csdn的声音——很烦人的,叮咚叮咚的!
如果你写了个线程类,并希望能象CWnd::WindowProc重载的话?
你就要为该类写一个全局线程入口函数. 传入参数为该类指针不就行了