![]() |
|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
![]() |
|
Опции темы | Поиск в этой теме |
![]() |
#1 |
Пользователь
Регистрация: 09.12.2011
Сообщений: 36
|
![]()
Дано такое задание: Написати програму, що моделює обробний пристрій і чергу до нього. Потік, що імітує пристрій, одержує якесь завдання із загальної змінної (значення, що зберігається в змінній, може бути інтерпретоване як час виконання завдання). Після обробки завдання потік-пристрій повідомляє потоків-черги, що він вільний, при цьому потік-черга поміщає в змінну нове завдання. Для синхронізації потоків використати об'єкт синхронізації за допомогою мютексів.
Я решил его при помощи критических секций, но никак не могу решить при помощи мьютексов. Вот недоделаный вариант. Погогите плз. Могу дать код с использованием КС. |
![]() |
![]() |
![]() |
#2 | |
Пользователь
Регистрация: 09.12.2011
Сообщений: 36
|
![]() Цитата:
{ Form1->Edit1->Text="1000"; Form1->Edit2->Text="1000"; Form1->Edit3->Text="1000"; Form1->Label2->Caption="В черзі"; Form1->Label3->Caption="В черзі"; Form1->Label4->Caption="В черзі"; } //----------------------------------------------------- void __fastcall TForm1::Button1Click(TObject *Sender) { hMutex=CreateMutex(NULL,FALSE,NULL) ; WaitForSingleObject(hMutex,INFINITE ); hThread=CreateThread(NULL, 0, (LPTHREAD_START_ROUTINE)ThreadFunc1 , &dwThrdParam, 0, &dwThreadId); if(hThread==NULL) ShowMessage("CreateThear failed"); else SetThreadPriority(hThread,THREAD_PR IORITY_NORMAL); ////////// WaitForSingleObject(hMutex,INFINITE ); hThread=CreateThread(NULL, 0, (LPTHREAD_START_ROUTINE)ThreadFunc2 , &dwThrdParam, 0, &dwThreadId); if(hThread==NULL) ShowMessage("CreateThear failed"); else SetThreadPriority(hThread,THREAD_PR IORITY_NORMAL); ////////// WaitForSingleObject(hMutex,INFINITE ); hThread=CreateThread(NULL, 0, (LPTHREAD_START_ROUTINE)ThreadFunc3 , &dwThrdParam, 0, &dwThreadId); if(hThread==NULL) ShowMessage("CreateThear failed"); else SetThreadPriority(hThread,THREAD_PR IORITY_NORMAL); } //-------------------------------------------------------- DWORD WINAPI ThreadFunc1(LPVOID lpParam) { WaitForSingleObject(hMutex,INFINITE ); Form1->Label2->Caption="Виконується"; Sleep(StrToInt(Form1->Edit1->Text)); Form1->Label2->Caption="Виконано"; ReleaseMutex(hMutex); return 0; } DWORD WINAPI ThreadFunc2(LPVOID lpParam) { WaitForSingleObject(hMutex,INFINITE ); Form1->Label3->Caption="Виконується"; Sleep(StrToInt(Form1->Edit1->Text)); Form1->Label3->Caption="Виконано"; ReleaseMutex(hMutex); return 0; } DWORD WINAPI ThreadFunc3(LPVOID lpParam) { WaitForSingleObject(hMutex,INFINITE ); Form1->Label4->Caption="Виконується"; Sleep(StrToInt(Form1->Edit1->Text)); Form1->Label4->Caption="Виконано"; ReleaseMutex(hMutex); return 0; } это код. |
|
![]() |
![]() |
![]() |
![]() |
||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Синхронизация потоков | добрый_фей | Помощь студентам | 5 | 09.12.2011 19:57 |
Синхронизация потоков | kardinal94 | Общие вопросы Delphi | 5 | 29.11.2010 21:13 |
Синхронизация потоков в С++ | erazer89 | Помощь студентам | 0 | 27.04.2010 20:14 |
синхронизация потоков | m_kostik | Win Api | 0 | 26.03.2010 23:56 |
Синхронизация потоков с использованием именованых каналов | _Денис | Помощь студентам | 0 | 09.01.2010 16:58 |