WinAPI и потоки
Пользователи, просматривающие топик: none
|
Зашли как: Guest
|
Имя |
Сообщение |
<< Старые топики Новые топики >> |
|
|
WinAPI и потоки - 2006-10-21 14:30:32.470000
|
|
|
nixo
Сообщений: 213
Оценки: 0
Присоединился: 2006-06-25 20:22:26
|
вот есть код, в котором 2 потока работают, в одном строка меняется случайным образом, а в другом она выводится. потоки работают параллельно.но почему-то у меня все время выводится одна и та же строка в консоль, хотя при трассировке там видно, что строка меняется.кто может подсказать, в чем проблема? #include "stdafx.h" #include "windows.h" #include "iostream.h" #include "stdlib.h" CRITICAL_SECTION cs; const int RANGE_MIN = 0; const int RANGE_MAX = 5; DWORD WINAPI ThreadFunc1(PVOID pvParam) { char *s=(char*)pvParam; char *tmp=s; DWORD dwResult=0; for(int i=0;*tmp;tmp++)if((*tmp)>='A' && (*tmp)<='Z')i++; while(1) { EnterCriticalSection(&cs); cout<<s<<" "<<i<<endl; LeaveCriticalSection(&cs); Sleep(300); cout<<"Thread 1 is working…"<<endl; } return (dwResult); } DWORD WINAPI ThreadFunc2(PVOID pvParam) { char *s1="privet",*s2="hi:)!!",*s3="preved"; DWORD dwResult=0; while(1) { int randnum = (((double) rand() / (double) RAND_MAX) * RANGE_MAX + RANGE_MIN); EnterCriticalSection(&cs); switch(randnum) { case 0:break; case 1:pvParam=(void*)s1;break; case 2:pvParam=(void*)s2;break; case 3:pvParam=(void*)s3;break; } LeaveCriticalSection(&cs); cout<<"Thread 2 is working…"<<endl; Sleep(300); } return (dwResult); } int main(int, char**) { char str[80]="Hello!"; InitializeCriticalSection(&cs); HANDLE hThread1=CreateThread(NULL,0,ThreadFunc1,&str,0,0); HANDLE hThread2=CreateThread(NULL,0,ThreadFunc2,&str,0,0); Sleep(1800); DeleteCriticalSection(&cs); return 0; }
|
|
|
RE: WinAPI и потоки - 2006-10-21 22:09:43.053333
|
|
|
alexbozhko
Сообщений: 1024
Оценки: 0
Присоединился: 2005-11-24 13:35:34
|
Я не читал детально код, но на вскидку… rand()- псевдослучайная функция. Прямо зависит от системного времени. Рассинхронизируй потоки (вставь паузу между ними при вызове). Или должна быть функция - аналог Rendomize в Паскале
|
|
|
RE: WinAPI и потоки - 2006-10-22 01:58:34.273333
|
|
|
nixo
Сообщений: 213
Оценки: 0
Присоединился: 2006-06-25 20:22:26
|
а всё, я разобрался. оказывается,во всем виновата т.н. "область видимости"
|
|
|
|
|