Пользователь
Регистрация: 08.02.2012
Сообщений: 44
|
Visual C++ Будильник
Всем привет есть код рабочий (Visual C++ работаю в Microsoft Visual Studio 2010 ). в нём есть проблемма музыка играет в будильнике если указываеш какойто промежуток времени по истечению секундо мера к примеру. но будильник не хочет играть коректно когда указываеш конкретное время во сколько он должен заиграть. играет в разное время но не в указаное .вод код.
Цитата:
#include <windows.h>
#include <Mmsystem.h>
#include <tchar.h>
#include <commctrl.h>
#include <time.h>
#include "resource.h"
#pragma comment(lib,"Winmm.lib")
#pragma comment(lib,"comctl32")
HWND hDlg, hStart, hCancel, hHour, hMin, hSec, hSpinH, hSpinM, hSpinS, hRB_Clock, hRB_Timer;
HANDLE hThr;
int ThrParam;
BOOL CALLBACK DlgProc(HWND, UINT, WPARAM, LPARAM);
int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInst, LPSTR lpszCmdLine, int nCmdShow)
{
INITCOMMONCONTROLSEX icc = {sizeof(INITCOMMONCONTROLSEX)};
icc.dwICC = ICC_WIN95_CLASSES;
InitCommonControlsEx(&icc);
return DialogBox(hInstance, MAKEINTRESOURCE(IDD_DIALOG1), NULL, DlgProc);
}
VOID EnableAll(int p)
{
EnableWindow(hStart, p);
EnableWindow(hCancel, !p);
EnableWindow(hHour, p);
EnableWindow(hMin, p);
EnableWindow(hSec, p);
EnableWindow(hSpinH, p);
EnableWindow(hSpinM, p);
EnableWindow(hSpinS, p);
EnableWindow(hRB_Clock, p);
EnableWindow(hRB_Timer, p);
}
DWORD WINAPI TheardFunction(PVOID pvPrg)
{
HANDLE hTimer = CreateWaitableTimer(NULL,FALSE,TEXT ("AlarmTimer"));
LARGE_INTEGER t;
t.QuadPart = -1*10000000*(*((int*)pvPrg));
/*TCHAR tmp[50];
wsprintf(tmp,TEXT("ThrParam = %d"),*((int*)pvPrg));
MessageBox(0,tmp,TEXT("Message"),MB _OK);*/
SetWaitableTimer(hTimer,&t,0,NULL,N ULL,TRUE);
WaitForSingleObject(hTimer,INFINITE );
/*int rez = WaitForSingleObject(hTimer,INFINITE );
TCHAR tmp[50];
if(rez == WAIT_OBJECT_0) _tcscpy(tmp,TEXT("WAIT_OBJECT_0"));
else if(rez == WAIT_TIMEOUT) _tcscpy(tmp,TEXT("WAIT_TIMEOUT"));
else if(rez == WAIT_FAILED) _tcscpy(tmp,TEXT("WAIT_FAILED"));*/
PlaySound(TEXT("sound\\alarm.wav"), NULL,SND_FILENAME | SND_ASYNC | SND_LOOP);
if(MessageBox(hDlg,TEXT("Подъем!"), TEXT("Сообщение"),MB_OK | MB_ICONINFORMATION) == IDOK) PlaySound(NULL,NULL,SND_ASYNC);
EnableAll(1);
CancelWaitableTimer(hTimer);
CloseHandle(hTimer);
//ExitThread(NULL);
return TRUE;
}
BOOL CALLBACK DlgProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
{
switch(message)
{
case WM_CLOSE:
EndDialog(hWnd, 0);
return TRUE;
case WM_INITDIALOG:
hDlg = hWnd;
hStart = GetDlgItem(hWnd, IDC_START);
hCancel = GetDlgItem(hWnd, IDC_CANCEL);
hHour = GetDlgItem(hWnd, IDC_HOR);
hMin = GetDlgItem(hWnd, IDC_MIN);
hSec = GetDlgItem(hWnd, IDC_SEC);
hSpinH = GetDlgItem(hWnd, IDC_H);
hSpinM = GetDlgItem(hWnd, IDC_M);
hSpinS = GetDlgItem(hWnd, IDC_S);
hRB_Clock = GetDlgItem(hWnd, IDC_CLOCK);
hRB_Timer = GetDlgItem(hWnd, IDC_TIMER);
SendMessage(hSpinH, UDM_SETRANGE32, 0, 23);
SendMessage(hSpinM, UDM_SETRANGE32, 0, 59);
SendMessage(hSpinS, UDM_SETRANGE32, 0, 59);
SendMessage(hRB_Clock,BM_SETCHECK,B ST_CHECKED,0);
return TRUE;
case WM_COMMAND:
if(LOWORD(wParam) == IDC_START)
{
int nHour = SendMessage(hSpinH, UDM_GETPOS32, 0, NULL);
int nMin = SendMessage(hSpinM, UDM_GETPOS32, 0, NULL);
int nSec = SendMessage(hSpinS, UDM_GETPOS32, 0, NULL);
if(SendMessage(hRB_Clock,BM_GETCHEC K,0,0)==BST_CHECKED)
{
time_t t = time(NULL);
struct tm Time = *(localtime(&t));
int UnivTime = (Time.tm_hour)*60*60 + (Time.tm_min)*60+ (Time.tm_sec);//
int TargetTime = nHour*60*60 + nMin*60+ nSec;//
if(TargetTime >= UnivTime) ThrParam = TargetTime - UnivTime;
else ThrParam = 24*60*60 - (UnivTime - TargetTime);//
}
else if(SendMessage(hRB_Timer,BM_GETCHEC K,0,0)==BST_CHECKED)
{
ThrParam = nHour*60*60 + nMin*60 + nSec; // ThrParam = nHour*60*60 + nMin*60+ nSec;
}
EnableAll(0);
/*TCHAR tmp[50];
wsprintf(tmp,TEXT("ThrParam = %d"),ThrParam);
MessageBox(0,tmp,TEXT("Message"),MB _OK);*/
hThr= CreateThread(NULL,NULL,TheardFuncti on,&ThrParam,NULL,NULL);
}
else if(LOWORD(wParam) == IDC_CANCEL)
{
TerminateThread(hThr,1);
EnableAll(1);
}
return TRUE;
}
return FALSE;
}
|
вот как я пологаю проблемный код тут включаетса в какое время должна заиграть музика
Цитата:
if(SendMessage(hRB_Clock,BM_GETCHEC K,0,0)==BST_CHECKED)
{
time_t t = time(NULL);
struct tm Time = *(localtime(&t));
int UnivTime = (Time.tm_hour)*60*60 + (Time.tm_min)*60+ (Time.tm_sec);//
int TargetTime = nHour*60*60 + nMin*60+ nSec;//
if(TargetTime >= UnivTime) ThrParam = TargetTime - UnivTime;
else ThrParam = 24*60*60 - (UnivTime - TargetTime);//
}
|
подскажите что не так?
|