程序中有好几个线程,其中有一个线程负责统计数据向屏幕输出,我希望在这个线程一起动,它自己就能每隔1秒统计数据向屏幕输出,而不是由调用它的父线程每隔一秒就调用它。
该如何作呢,请大侠们给点思路。
谢谢!
该如何作呢,请大侠们给点思路。
谢谢!
解决方案 »
- 网络编程 求助 发送字符代码不解
- 选项卡切换问题,很多子窗体
- T7系列的CPU速度为什么在这个程序上还比不上T5系列的呢?
- 简单问题,为什么我在VS2005里的窗体上加一个flexgrid,启动窗体后就自动退出呢?
- 如何截获DLL中的弹出提示窗口??
- 屏幕上的控件重绘问题
- 大哥们帮帮忙呀,处理WM_NCPAINT消息,自绘菜单如果实现
- bool / BOOL 是不同的?NULL和null呢?char实际保存成uint类型?
- 保存对话框
- MFC用对话框编程,使用自定义类中的函数出现了以下问题
- WINDOWS的“开始”->“文档”, 其中的“文档”在那个目录?
- 我安装了vc6以后,为什么,访问很多网页都要让我调试错误?这样的提示可以屏蔽不?
在循环中加一句
Sleep(1000);这个语句能有让一个线程停止调度一定的时间,这里是1秒
否则就在你的计算程序中的某个地方不断读取时间,比较累计到一秒就传输局
不过计算量太大时会影响速度,
如果不要求精确,可用这样的方式:
if( !(++nCount - nMaxNum) )
{
nCount = 0;
///
//输出你的数据
........
........
///
}
把nMaxNum取一个相当巨大的数
其中的参数分别为时间间隔、回调函数指针,时钟标识。
你自己必须实现你的回调函数,你要桌的事情在回调函数中完成。
其中的参数分别为时间间隔、回调函数指针,时钟标识。
你自己必须实现你的回调函数,你要桌的事情在回调函数中完成。
有一个线程负责统计数据向屏幕输出这个线程统计数据的任务重不重啊,如果只是输出,倒是用Sleep最好
这个线程统计数据的任务重不重啊,如果只是输出,倒是用Sleep最好重到不重,不过我要求一秒钟它就能负责统计数据一次,但每次统计所需的时间不同,所以用Sleep的话,不好指定Sleep()的参数。
大家有什么好方法吗?
像定时器样,到了一秒钟它就自动统计一次。
谢谢!
不需要窗口句柄的,具体查一下msdn就可以知道如何设置没有窗口句柄的定时器了
同时设计一个全局事件,用事件机制启动线程(即一秒定时到),和阻塞线程(做完线程中的工作后,而时间也没有到),
线程可以用死循环
user timer in workthread of console app
#include <windows.h>
#include <stdio.h>
#include <conio.h>
unsigned long WINAPI Thread(PVOID pvoid);
void main()
{
DWORD dwThreadId;
printf("use timer in workthread of console application<masterz>\n");
HANDLE hThread = CreateThread(
NULL, // no security attributes
0, // use default stack size
Thread, // thread function
0, // argument to thread function
0, // use default creation flags
&dwThreadId);
DWORD dwwait=WaitForSingleObject(hThread,1000*30);
switch(dwwait)
{
case WAIT_ABANDONED:
printf("main thread WaitForSingleObject return WAIT_ABANDONED\n");
break;
case WAIT_OBJECT_0:
printf("main thread WaitForSingleObject return WAIT_OBJECT_0\n");
break;
case WAIT_TIMEOUT:
printf("main thread WaitForSingleObject return WAIT_TIMEOUT\n");
break;
}
CloseHandle(hThread);
_getch();
}unsigned long WINAPI Thread(PVOID pvoid)
{
MSG msg;
PeekMessage(&msg, NULL, WM_USER, WM_USER, PM_NOREMOVE);
UINT timerid=SetTimer(NULL,111,3000,NULL);
BOOL bRet;
int count =0;
while( (bRet = GetMessage( &msg, NULL, 0, 0 )) != 0)
{
if (bRet == -1)
{
// handle the error and possibly exit
}
else
if(msg.message==WM_TIMER)
{
count++;
printf("WM_TIMER in work thread count=%d\n",count);
if(count>4)
break;
}
else
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}
}
KillTimer(NULL,timerid);
printf("thread end here\n");
return 0;
}