如何暂停主线程,并让其恢复 我用SetTimer做了一个定时器,听别人说这样已经新建了一个线程来,然后想要在一定时候用这个定时器挂起主程序的线程,并且timer的线程继续运行,然后再到一定的条件下恢复这个主线程,用SuspendThread和ReseumThread可以实现吧?还有用SuspendThread需要线程的句柄,请问主程序线程的句柄是什么?怎么获得啊?多谢各位解答!! 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 你被人“忽悠”了,定时器不会另开线程,定时器的回调函数是在调用SetTimer的线程里面执行的,如果不信你可以去查MSDN或者做程序验证一下。 我也不太懂,不过觉得好像lz需求的逻辑有问题,定时器的作用是post WM_TIMER消息,如果挂起了主线程,谁处理WM_TIMER消息??“我用SetTimer做了一个定时器,听别人说这样已经新建了一个线程来”,我不知道这话对不对,我觉得即使是已经新建了一个线程,这也不是你能控制的一般的线程?? SetTimer不会新建一个线程,只会定时发送WM_TIMER消息,最后还是你调用SetTimer的那个线程来处理WM_TIMER消息并调用回调函数。 SuspendThread //线程挂起ResumeThread //恢复运行 你用AfxBeginThread就可以创建线程了。具体使用方式看这个函数的说明。可以创建函数线程和类线程。我这里只有类线程的例子:m_pDGPSThread=(CDGPSThread*)AfxBeginThread(RUNTIME_CLASS(CDGPSThread),THREAD_PRIORITY_NORMAL,0,CREATE_SUSPENDED,NULL); m_pDGPSThread->ResumeThread();一般在线程类中帮定一个对话框,用于进行消息循环。#if !defined(AFX_DGPSTHREAD_H__A3642D5F_782A_4875_A806_269144078E76__INCLUDED_)#define AFX_DGPSTHREAD_H__A3642D5F_782A_4875_A806_269144078E76__INCLUDED_#if _MSC_VER > 1000#pragma once#endif // _MSC_VER > 1000// DGPSThread.h : header file//#include "DGPSDlg.h"/////////////////////////////////////////////////////////////////////////////// CDGPSThread threadclass CDGPSThread : public CWinThread{ DECLARE_DYNCREATE(CDGPSThread)protected: CDGPSThread(); // protected constructor used by dynamic creation// Attributespublic: CDGPSDlg* m_pDlg;// Operationspublic:// Overrides // ClassWizard generated virtual function overrides //{{AFX_VIRTUAL(CDGPSThread) public: virtual BOOL InitInstance(); virtual int ExitInstance(); //}}AFX_VIRTUAL// Implementationprotected: virtual ~CDGPSThread(); // Generated message map functions //{{AFX_MSG(CDGPSThread) // NOTE - the ClassWizard will add and remove member functions here. //}}AFX_MSG DECLARE_MESSAGE_MAP()};///////////////////////////////////////////////////////////////////////////////{{AFX_INSERT_LOCATION}}// Microsoft Visual C++ will insert additional declarations immediately before the previous line.#endif // !defined(AFX_DGPSTHREAD_H__A3642D5F_782A_4875_A806_269144078E76__INCLUDED_) 如果是函数的话,你定义一个全局函数,然后作为AfxBeginThread的参数。 OpenThread获取线程句柄但要求你有该线程的ID 现在又遇到一个问题。我这样做的:原来的方案:用一个按钮,点击响应函数A,现在改进的方案:点击按钮,响应函数B,B创建一个线程,线程里激发函数C,C中包含原函数A的所有内容。但是一运行就出错,因为C不是静态的函数?怎么办。 其实我是想这样。我定义了两个函数SETTIMER定时器和B;这两个函数都在同一个对话框类里面,其中B函数正常运行的话要很长很长时间,请问怎么通过SETTIMER定时器去终止B函数的运行。在B函数中用RETURN可以把B函数终止掉,我的意思就是如何在SETTIMER定时器中执行B函数功能。谢谢! 主線程運行b的時候是不會處理WM_TIMERR消息的 网络插头被拔下,vc编写的应用程序中如何立即得到消息和判断? CListView的问题?在线等--- VC开发的ActiveX组件在注册时的问题 寻<<vc技术内幕》的翻译版本,50分相送 100分---紧急求助:网易拍如何编程啊? long 类型数据的指针是什么?? 救命啊。。。ISAPI如何读取ASP的Session变量? 我学VC的感觉 ~~~~~请问如何将数据写到EXE文件里,并且在EXE文件执行时能够读出这些数据??? 怎样才能获得当前所选择的打印机 VC6.0关于DATAGRID的不同列设置不同颜色的问题 如何在一个函数中终止另一个函数的运行
“我用SetTimer做了一个定时器,听别人说这样已经新建了一个线程来”,我不知道这话对不对,我觉得即使是已经新建了一个线程,这也不是你能控制的一般的线程??
ResumeThread //恢复运行
具体使用方式看这个函数的说明。可以创建函数线程和类线程。
我这里只有类线程的例子:
m_pDGPSThread=(CDGPSThread*)AfxBeginThread(RUNTIME_CLASS(CDGPSThread),THREAD_PRIORITY_NORMAL,0,CREATE_SUSPENDED,NULL);
m_pDGPSThread->ResumeThread();
一般在线程类中帮定一个对话框,用于进行消息循环。#if !defined(AFX_DGPSTHREAD_H__A3642D5F_782A_4875_A806_269144078E76__INCLUDED_)
#define AFX_DGPSTHREAD_H__A3642D5F_782A_4875_A806_269144078E76__INCLUDED_#if _MSC_VER > 1000
#pragma once
#endif // _MSC_VER > 1000
// DGPSThread.h : header file
//
#include "DGPSDlg.h"
/////////////////////////////////////////////////////////////////////////////
// CDGPSThread threadclass CDGPSThread : public CWinThread
{
DECLARE_DYNCREATE(CDGPSThread)
protected:
CDGPSThread(); // protected constructor used by dynamic creation// Attributes
public:
CDGPSDlg* m_pDlg;// Operations
public:// Overrides
// ClassWizard generated virtual function overrides
//{{AFX_VIRTUAL(CDGPSThread)
public:
virtual BOOL InitInstance();
virtual int ExitInstance();
//}}AFX_VIRTUAL// Implementation
protected:
virtual ~CDGPSThread(); // Generated message map functions
//{{AFX_MSG(CDGPSThread)
// NOTE - the ClassWizard will add and remove member functions here.
//}}AFX_MSG DECLARE_MESSAGE_MAP()
};///////////////////////////////////////////////////////////////////////////////{{AFX_INSERT_LOCATION}}
// Microsoft Visual C++ will insert additional declarations immediately before the previous line.#endif // !defined(AFX_DGPSTHREAD_H__A3642D5F_782A_4875_A806_269144078E76__INCLUDED_)
获取线程句柄但要求你有该线程的ID
原来的方案:用一个按钮,点击响应函数A,
现在改进的方案:点击按钮,响应函数B,B创建一个线程,线程里激发函数C,C中包含原函数A的所有内容。
但是一运行就出错,因为C不是静态的函数?怎么办。