Re: Глюки при работе с потоком
От: VladKurmaz Украина http://tis-method.org/
Дата: 03.04.07 08:25
Оценка: +1
Здравствуйте, stepanov_i, Вы писали:

_>С чем может быть проблема?!


Попробуйте так.

hThreadRead = CreateThread (NULL, 0, ThreadReadProc, NULL, CREATE_SUSPENDED, &dwThreadReadId);
hThreadWrite = CreateThread (NULL, 0, ThreadWriteProc, NULL, 0, &dwThreadWriteId);


DWORD WINAPI ThreadReadProc (LPVOID lpParam)
{
static BYTE buf_in[12] = { 0 };
while( WaitForSingleObject( mExitReadThreadEvent, 100 ) == WAIT_TIMEOUT )
{
if (!ReadFile(ComHANDLE,buf_in,12,&bc,NULL))
MessageBox (hMainWnd,"Невозможно считать информацию с порта","Ошибка",MB_ICONHAND);
else
MessageBox (NULL,TEXT("......"),"Получены данные",MB_OK);
}
}

DWORD WINAPI ThreadWriteProc (LPVOID lpParam)
{ // поток для отправки информации на устройство... 1 раз в 15 секунд должен отрабатывать
static BYTE nSendData[7] = { 0 };
DWORD numbytes;

while( WaitForSingleObject( mExitWriteThreadEvent, 15000 ) == WAIT_TIMEOUT )
{
if (ComHANDLE)
{
for (int i = 1; i <= 32/*0x5*/; i++)
{
nSendData[3] = i;
// подсчет контрольной суммы
nSendData[5] = nSendData[1] + nSendData[4] + nSendData[2] + nSendData[3];
nSendData[5] = 0 — nSendData[5];
bool bRez = WriteFile(ComHANDLE,nSendData,7,&numbytes,NULL);
if (! bRez)
MessageBox (NULL, "Невозможно отправить данные", szCOM, MB_OK);
else
{
Sleep(450);
continue;
}
}
}
}
}

И лучше не использовать MessageBox из "рабочих" потоков для идентификации
ошибки, логичнее было бы послать сообщение основному GUI потоку через PostThreadMessage
или PostMessage.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.