这样的程序应该怎么写?(只有思路也欢迎) 开一个分线程,分线程返回一个值,主线程在开了分线程后等待2秒,如果分线程在2秒后还没有返回,则将其结束。自己则继续下去。 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 WaitForSingleObject, 用新线程的句柄作为等待对象,dwMilliseconds 设为 2000不保证计时完全准确。 DWORD WINAPI ThreadProc(LPVOID lpParameter){ //子线程的代码 return 0;}主现成的代码://.......DWORD dwThreadID;HANDLE hThread = CreateThread(NULL, 0, ThreadProc, NULL, 0, &dwThreadID);DWORD dwTick = GetTickCount();while(WaitForSingleObject(hThread,0)!=WAIT_OBJECT_0 && GetTickCount()-dwTick<2000) { //最多等待2秒 Sleep(20); }if (WaitForSingleObject(hThread,0)!=WAIT_OBJECT_0) TerminateThread(hThread, 0); //强制结束子线程CloseHandle(hThread); 就是就是,使用WaitForSingleObject时直接指定2000就可以了,主线程的代码修改如下://.......DWORD dwThreadID;HANDLE hThread = CreateThread(NULL, 0, ThreadProc, NULL, 0, &dwThreadID);if (WaitForSingleObject(hThread,2000)!=WAIT_OBJECT_0) TerminateThread(hThread, 0); //强制结束子线程CloseHandle(hThread);//......... 主线程调用WAITFORSINGLEOBJECT();等待2秒.在线程退出时调用SETEVENT(); WaitForMultiObject()CreateThread()新的thread加一个消息循环。主线程等待2秒后,发过message过去子thread 结束。 给线成中设置一个标志位,当线成启动后,主线成等待2秒,然后判断有没有返回值,没有把标志位设置为TRUE,新开的线成自动退出。 首先定一个CWinThread *m_pThread ;然后再开线程的函数里:m_pThread = AfxCreateThread(...) ;SetTimer(1,2000,NULL) ;...然后在Cxxxx::OnTimer(){ DWORD retVal ; ::GetExitCodeThread(m_pThread->m_hThread,&retVal) ; if(retVal == STILL_ACTIVE) { AfxEndThread(0,TRUE) ; } Cxxxx::OnTimer() ;}如果是GUI的,可以用m_pThread->PostThreadMessage(xxxx,xxx,xxx);这类强制退出。 同一窗口过程, 创建多窗口问题, 求解!!!! call stack 有木有人能帮忙分析一些 使用Windows API设置串口波特率为115200,但是为什么通过“我的电脑”查看串口波特率还是9600? 发的贴子怎么不见了? MSN免费空间相册上传照片控件外包 怎么做主页(用FLASH) "z-order"是什么意思? SERVER — CLIENT程序之间同步状态检测的策略(不在乎分的多少,而是一种对真知的追求,你说是不是?) Mouse求助 请问一个关于ole对象的小问题? 在VC中如何使用"SendInput()"函数? 一个招聘问题.
{
//子线程的代码
return 0;
}主现成的代码:
//.......
DWORD dwThreadID;
HANDLE hThread = CreateThread(NULL, 0, ThreadProc,
NULL, 0, &dwThreadID);
DWORD dwTick = GetTickCount();
while(WaitForSingleObject(hThread,0)!=WAIT_OBJECT_0
&& GetTickCount()-dwTick<2000) {
//最多等待2秒
Sleep(20);
}
if (WaitForSingleObject(hThread,0)!=WAIT_OBJECT_0)
TerminateThread(hThread, 0); //强制结束子线程
CloseHandle(hThread);
代码修改如下:
//.......
DWORD dwThreadID;
HANDLE hThread = CreateThread(NULL, 0, ThreadProc,
NULL, 0, &dwThreadID);
if (WaitForSingleObject(hThread,2000)!=WAIT_OBJECT_0)
TerminateThread(hThread, 0); //强制结束子线程
CloseHandle(hThread);
//.........
在线程退出时调用SETEVENT();
CreateThread()新的thread加一个消息循环。
主线程等待2秒后,发过message过去
子thread 结束。
然后再开线程的函数里:
m_pThread = AfxCreateThread(...) ;
SetTimer(1,2000,NULL) ;
...
然后在
Cxxxx::OnTimer()
{
DWORD retVal ;
::GetExitCodeThread(m_pThread->m_hThread,&retVal) ;
if(retVal == STILL_ACTIVE) {
AfxEndThread(0,TRUE) ;
}
Cxxxx::OnTimer() ;
}
如果是GUI的,可以用
m_pThread->PostThreadMessage(xxxx,xxx,xxx);
这类强制退出。