AfxBeginThread创建线程

问题描述

我在MFC程序中使用AfcBeginThread函数创建线程,总是出现一下错误头文件中在类CscanServerDlg中声明以下线程控制函数:UINT__cdeclSendThreadFunc(LPVOIDlparam);//发送线程控制函数UINT__cdeclRecvThreadFunc(LPVOIDlparam);//接收线程控制函数

在.cpp文件中调用AfxBeginThread创建线程AfxBeginThread(&CscanServerDlg::SendThreadFunc,this);AfxBeginThread(&CscanServerDlg::RecvThreadFunc,this);

编译时出现这样的错误:c:programfilesmicrosoftvisualstudio8vcatlmfcincludeafxwin.h(4202):可能是“CWinThread*AfxBeginThread(AFX_THREADPROC,LPVOID,int,UINT,DWORD,LPSECURITY_ATTRIBUTES)”c:programfilesmicrosoftvisualstudio8vcatlmfcincludeafxwin.h(4205):或“CWinThread*AfxBeginThread(CRuntimeClass*,int,UINT,DWORD,LPSECURITY_ATTRIBUTES)”错误1errorC2665:“AfxBeginThread”:2个重载中没有一个可以转换所有参数类型f:projectsource_codescanserverscanserverscanserverdlg.cpp477错误2errorC2665:“AfxBeginThread”:2个重载中没有一个可以转换所有参数类型f:projectsource_codescanserverscanserverscanserverdlg.cpp478可是在我看到的实例中,AfxBeginThread的使用方法都是这样的,请问哪里出错了?紧急,谢谢!

解决方案

解决方案二:
你这样试一试:C/C++codestaticUINT__cdeclSendThreadFunc(LPVOIDlparam);//发送线程控制函数staticUINT__cdeclRecvThreadFunc(LPVOIDlparam);//接收线程控制函数在.cpp文件中调用AfxBeginThread创建线程C/C++codeAfxBeginThread((AFX_THREADPROC)CscanServerDlg::SendThreadFunc,this);AfxBeginThread((AFX_THREADPROC)CscanServerDlg::RecvThreadFunc,this);
解决方案三:
该回复于2008-06-14 13:46:56被版主删除
解决方案四:
在.cpp文件中调用AfxBeginThread创建线程改一下:AfxBeginThread(SendThreadFunc,this);AfxBeginThread(RecvThreadFunc,this);
解决方案五:
你调用的线程函数必须是全局函数,或类的静态函数所以staticUINT__cdeclSendThreadFunc(LPVOIDlparam);//发送线程控制函数staticUINT__cdeclRecvThreadFunc(LPVOIDlparam);//接收线程控制函数
解决方案六:
在.cpp文件中调用AfxBeginThread创建线程改一下:AfxBeginThread(SendThreadFunc,this);AfxBeginThread(RecvThreadFunc,this);
解决方案七:
顶一楼。线程入口函数前需要加那个宏。VS2005自己定的,没办法。
解决方案八:
顶不错
解决方案九:
引用4楼vecri的回复:

你调用的线程函数必须是全局函数,或类的静态函数所以staticUINT__cdeclSendThreadFunc(LPVOIDlparam);//发送线程控制函数staticUINT__cdeclRecvThreadFunc(LPVOIDlparam);//接收线程控制函数

这个是正解。另外为了保险还是AfxBeginThread(SendThreadFunc,(LPVOID)this);AfxBeginThread(RecvThreadFunc,(LPVOID)this);为好。在写com的时候有时候必须得强制转为这些才行。不转不行。。此思想得益于COM。
解决方案十:
传入的this指针代表的是什么呢?
解决方案十一:
正在学习多线程
解决方案十二:
引用9楼zhongyunde的回复:

传入的this指针代表的是什么呢?

this就是当前对象本身的指针.

时间: 2024-10-26 16:45:27

AfxBeginThread创建线程的相关文章

linux下创建线程内存泄漏,php的json

  这次还是把遇到的几个问题整理一下,希望再遇到的同学能轻松解决.另外最近博客的feeds延迟更新的原因也会一起说明一下. 1.linux下创建线程导致内存泄漏 今天在外网发布了一个server之后,用top发现virt的使用量一直在涨,而且一次涨8m.于是可以断定有内存泄漏了,经过排查,最终确定原因出在多线程的问题上: 代码如下: 1 2 3 4 5 6 pthread_t thread_id; int ret=pthread_create(&thread_id, NULL, flush_th

Java创建线程池两种不同方法的比较

用java做抓取的时候免不了要用到多线程的了,因为要同时抓取多个网站或一条线程抓取一个网站的话实在太慢,而且有时一条线程抓取同一个网站的话也比较浪费CPU资源.要用到多线程的等方面,也就免不了对线程的控制或用到线程池.   我在做我们现在的那一个抓取框架的时候,就曾经用过java.util.concurrent.ExecutorService作为线程池,关于ExecutorService的使用代码大概如下: java.util.concurrent.Executors类的API提供大量创建连接池

JAVA创建线程池

线程池的作用: 线程池作用就是限制系统中执行线程的数量. 根据系统的环境情况,可以自动或 手动设置线程数量,达到运行的最佳效果:少了浪费了系统资源,多了造成系统拥挤效率不高.用线程池控制 线程数量,其他线程排队等候.一个任务执行完毕,再从队列的中取最前面的任务开始执行.若队列中没有等 待进程,线程池的这一资源处于等待.当一个新任务需要运行时,如果线程池中有等待的工作线程,就可以开 始运行了:否则进入等待队列. 为什么要用线程池: 减少了创建和销毁线程的次数,每个工作 线程都可以被重复利用,可执行

Java多线程初学者指南(3):使用Runnable接口创建线程

实现Runnable接口的类必须使用Thread类的实例才能创建线程.通过Runnable接口创建线程分为两步: 1.将实现Runnable接口的类实例化. 2.建立一个Thread对象,并将第一步实例化后的对象作为参数传入Thread类的构造方法. 最后通过Thread类的start方法建立线程. 下面的代码演示了如何使用Runnable接口来创建线程: package mythread; public class MyRunnable implements Runnable { public

Java多线程初学者指南(2):用Thread类创建线程

在Java中创建线程有两种方法:使用Thread类和使用Runnable接口.在使用Runnable接口时需要建立一个Thread实例.因此,无论是通过Thread类还是Runnable接口建立线程,都必须建立Thread类或它的子类的实例.Thread类的构造方法被重载了八次,构造方法如下: public Thread( ); public Thread(Runnable target); public Thread(String name); public Thread(Runnable t

java创建线程的三种方式及其对比

Java中创建线程主要有三种方式: 一.继承Thread类创建线程类 (1)定义Thread类的子类,并重写该类的run方法,该run方法的方法体就代表了线程要完成的任务.因此把run()方法称为执行体. (2)创建Thread子类的实例,即创建了线程对象. (3)调用线程对象的start()方法来启动该线程. package com.thread; public class FirstThreadTest extends Thread{ int i = 0; //重写run方法,run方法的方

如何创建线程

在前面,已经介绍了Java的基础知识,现在我们来讨论一点稍微难一点的问题:Java并发编程.当然,Java并发编程涉及到很多方面的内容,不是一朝一夕就能够融会贯通使用的,需要在实践中不断积累.由于并发肯定涉及到多线程,因此在进入并发编程主题之前,我们先来了解一下进程和线程的由来,这对后面对并发编程的理解将会有很大的帮助. 下面是本文的目录大纲: 一.操作系统中为什么会出现进程? 二.为什么会出现线程? 三.多线程并发 若有不正之处,请多多谅解并欢迎指正. 请尊重作者劳动成果,转载请标明原文地址:

线程管理(十二)用线程工厂创建线程

用线程工厂创建线程 在面向对象编程的世界中,工厂模式是最有用的设计模式.它是一个创造模式,还有它的目的是创建一个或几个类的对象的对象.然后,当我们想创建这些类的对象时,我们使用工厂来代替new操作. 有了这个工厂,我们有这些优势来集中创建对象们: 更简单的改变了类的对象创建或者说创建这些对象的方式. 更简单的为了限制的资源限制了对象的创建. 例如, 我们只new一个此类型的对象. 更简单的生成创建对象的统计数据. Java提供一个接口, ThreadFactory 接口实现一个线程对象工厂. 并

iOS开发多线程篇—创建线程

一.创建和启动线程简单说明 一个NSThread对象就代表一条线程 创建.启动线程 (1) NSThread *thread = [[NSThread alloc] initWithTarget:self selector:@selector(run) object:nil]; [thread start]; // 线程一启动,就会在线程thread中执行self的run方法 主线程相关用法 + (NSThread *)mainThread; // 获得主线程 - (BOOL)isMainThr