Перейти к публикации
  • Сейчас на странице   Всего пользователей: 0   (0 пользователей, 0 гостей)

Hed-kun

Программирование Т. 5

Рекомендованные сообщения

(изменено)

неужто в Киеве все так хреново с зп :palevo:

http://habrahabr.ru/...ou/blog/182728/

ты не больше, чем полгода назад узнавал может ли жава синиор рассчитывать на 2к.

я конечно понимаю, что ты браузерки за много кк пишешь, но в твоей дыре зп ниже, чем в Киеве

Так для моей дыры 2к это и нормально :tusila-zavodila: И то, эти 2к середина на Киевских графиках. А в Москве зп программистов начинаются от 3-4к и до 7-8. Я просто удивлен что в Киеве такие низкие зп. Все-таки столица. Я думаю Самару нужно сравнить с Одессой. В Одессе не знаю какие зп.


Изменено пользователем DIMAN123456789

Поделиться сообщением


Ссылка на сообщение

http://stackoverflow...ifier-not-found

решил короче погрузиться снова в плюсы, хелпуем по сабжу

ответил тебе :)


http://ru.iccup.com/dota/details/1295953.html

 

ИДИТЕ НАХУЙ С ТАКМИ ГОНДАРАМИ

СВЕН ТП

СВЕН ПУШИТ

СВЕН ХЕКС

СВЕН ДАБЛКИЛЛ

СВЕН 7ОО КРИПОВ

Поделиться сообщением


Ссылка на сообщение
(изменено)

там теперь другая херня вылезла, текст ошибки очень информативен :mameprivet:

Error 2 error C2664: '_beginthread' : cannot convert parameter 1 from 'unsigned int (__stdcall *)(void *)' to 'void (__cdecl *)(void *)'


Изменено пользователем justice_st

Поделиться сообщением


Ссылка на сообщение

У тебя тип указателя на функцию не соответствует тому, который требуется в аргументе. Сделай свою функцию такой же по сигнатуре. Думаю что в этом случае тебе достаточно поменять тип возвращаемого значения.

 

Сообщение же достаточно понятное: не могу преобразовать тип первого аргумента фигня1 к фигне2. фигня1 это всего лишь тип указателя на функцию - просто он так страшно записывается, это всё из си унаследовано.


http://ru.iccup.com/dota/details/1295953.html

 

ИДИТЕ НАХУЙ С ТАКМИ ГОНДАРАМИ

СВЕН ТП

СВЕН ПУШИТ

СВЕН ХЕКС

СВЕН ДАБЛКИЛЛ

СВЕН 7ОО КРИПОВ

Поделиться сообщением


Ссылка на сообщение
А в Москве зп программистов начинаются от 3-4к и до 7-8.

это вряд ли.

 

ну и так же не стоит забывать, что затраты на жизнь в Москве по меньшей мере в 2 раза выше, чем в Киеве. кроме того зарплата указывается явно до уплаты налогов


Колы я выросту - то хочу буты такым як я

5c8bbc85b99e.gif

 

годные смайлы

Поделиться сообщением


Ссылка на сообщение

7-8к ? таких зарплат быть не может в принципе, разве что в банках каких-нибудь для крупных руководителей


http://ru.iccup.com/dota/details/1295953.html

 

ИДИТЕ НАХУЙ С ТАКМИ ГОНДАРАМИ

СВЕН ТП

СВЕН ПУШИТ

СВЕН ХЕКС

СВЕН ДАБЛКИЛЛ

СВЕН 7ОО КРИПОВ

Поделиться сообщением


Ссылка на сообщение

там теперь другая херня вылезла, текст ошибки очень информативен :mameprivet:

Error 2 error C2664: '_beginthread' : cannot convert parameter 1 from 'unsigned int (__stdcall *)(void *)' to 'void (__cdecl *)(void *)'

твоя функция возвращает инт, да еще и __stdcall непонятно зачем.

А тебе нужна __cdecl void


Торжество разума в том, чтобы уживаться с теми, у кого этого разума нет. Вольтер.
Чтобы хорошо высыпаться, нужно спать 8 часов в день. И еще столько же ночью.

Поделиться сообщением


Ссылка на сообщение

ПРИШЕЛ 144К РЕПЫ ВСЕ НА ИЗЕЧАХ РАЗРУЛИЛ :pray: :pray: :pray: :pray: :mameprivet: :mameprivet: :buba:

Поделиться сообщением


Ссылка на сообщение
(изменено)

чето я запутался - как занять мутекс и как проверить мутекс на занятость?

if (WaitForSingleObject(hMutex, 100)!=WAIT_TIMEOUT ) правильно?

еще сраный баг с консолью бесит-строки из потоков выводятся одновременно и перемешиваются - http://stackoverflow.com/questions/9332263/synchronizing-std-cout-output-multi-thread тут 180к написал так что я нихера не понял :zloy:


Изменено пользователем justice_st

Поделиться сообщением


Ссылка на сообщение

http://msdn.microsoft.com/en-us/library/windows/desktop/ms682411(v=vs.85).aspx

 

Return value

If the function succeeds, the return value is a handle to the newly created mutex object.

If the function fails, the return value is NULL. To get extended error information, call GetLastError.

If the mutex is a named mutex and the object existed before this function call, the return value is a handle to the existing object, GetLastError returns ERROR_ALREADY_EXISTS, bInitialOwner is ignored, and the calling thread is not granted ownership. However, if the caller has limited access rights, the function will fail with ERROR_ACCESS_DENIED and the caller should use the OpenMutex function.

 

А, тебя не именованные мьютексы интересуют.

Короче, у мьютекса скорее всего нет проверки на "занятость". Можно просто начать его ожидание. И да, соответственно тебе вернется код результата. Либо сразу, либо через N миллисекунд. Так что да, примерно так, как ты и делаешь.


http://ru.iccup.com/dota/details/1295953.html

 

ИДИТЕ НАХУЙ С ТАКМИ ГОНДАРАМИ

СВЕН ТП

СВЕН ПУШИТ

СВЕН ХЕКС

СВЕН ДАБЛКИЛЛ

СВЕН 7ОО КРИПОВ

Поделиться сообщением


Ссылка на сообщение
(изменено)

if (WaitForSingleObject(hMutex, 100)!=WAIT_TIMEOUT ) {

вот так все работает

беда только с выводом, всё перемешивается

http://stackoverflow.com/questions/14010147/corrupted-output-with-c-cin-cout-threads-and-sync-with-stdio не помогает


Изменено пользователем justice_st

Поделиться сообщением


Ссылка на сообщение
(изменено)

Если есть возможность юзать буст - то просто юзай буст, и не еби себе мозг системным дерьмом.

да и 11 плюсы поддерживают потоки из коробки.


Изменено пользователем Tinplz

Поделиться сообщением


Ссылка на сообщение
(изменено)

нужно в студии или в былдере

Thread #

Thread #1 sets the resource value to 2 gets the resource9

:fffuuu:


Изменено пользователем justice_st

Поделиться сообщением


Ссылка на сообщение

если у тебя строки перемешиваются, значит либо оба потока не проверяют мьютекс, либо они вообще смотрят разные мьютексы

 

другого варианта быть не может.

 

и где исходник блеадь


Торжество разума в том, чтобы уживаться с теми, у кого этого разума нет. Вольтер.
Чтобы хорошо высыпаться, нужно спать 8 часов в день. И еще столько же ночью.

Поделиться сообщением


Ссылка на сообщение

// thr_windh.cpp : Defines the entry point for the console application.
//
#include "stdafx.h"
#include "windows.h"
#include "iostream"
#include "process.h"
using namespace std;
HANDLE hMutex;
int gRequiredIterations=0;
enum ConsoleColor
{
    Black		 = 0,
    Blue		  = 1,
    Green		 = 2,
    Cyan		  = 3,
    Red		   = 4,
    Magenta	   = 5,
    Brown		 = 6,
    LightGray	 = 7,
 DarkGray	  = 8,
    LightBlue	 = 9,
    LightGreen    = 10,
    LightCyan	 = 11,
    LightRed	  = 12,
    LightMagenta  = 13,
    Yellow	    = 14,
    White		 = 15
};

void SetColor(ConsoleColor extText, ConsoleColor extBackground)
{
//sets the console output text color to extText  and background to extBackground
HANDLE hStdOut = GetStdHandle(STD_OUTPUT_HANDLE);
   SetConsoleTextAttribute(hStdOut, (WORD)((extBackground << 4) | extText));
}
class __iterator {
   int innerValue;
public:
 __iterator() : innerValue() { }
 void increase() {
  this->innerValue = this->innerValue++;
  if (this->innerValue==gRequiredIterations) {
   //add some delay to display this message after threads terminated
   Sleep(10);
   SetColor(Red,White);
   cout << "Objective completed. ("<<this->innerValue<<" iterations done, "<<gRequiredIterations<<" required)" <<endl;
  }
 }
 int get__inner() const { return innerValue; }
};
__iterator gCurrentIterations;
static unsigned __stdcall threadFunc(void *params)
{
//old function - check if iterations required before checking if mutex available fails into some extra unwanted iterations
/*do {
while (gCurrentIterations.get__inner()<gRequiredIterations) {
 int *x = static_cast<int*>(params);
 if (WaitForSingleObject(hMutex, 100)!=WAIT_TIMEOUT ) {
  //WaitForSingleObject(hMutex, INFINITE);
  Sleep(100);
  SetColor(Black,Green);
  cout << "\nThread #"<<*x<<" gets the resource"<<endl;
  Sleep(900);
  ReleaseMutex(hMutex);
  gCurrentIterations.increase();
  SetColor(Black,Green);
  cout << "\nThread #"<<*x<<" sets the resource value to " << gCurrentIterations.get__inner() << endl;
  Sleep(100);
 }
 else {
  Sleep(50);
  SetColor(Black,Red);
  cout<<"\nThread #"<<*x<<" can not access to resource, retrying in 100 msecs"<<endl;
  Sleep(50);
 }
};*/
int *x = static_cast<int*>(params);
do {
 if (WaitForSingleObject(hMutex, 100)!=WAIT_TIMEOUT ) {
  //resource available
  if (gCurrentIterations.get__inner()<gRequiredIterations) {
   //there is some work to do
   Sleep(100);
   SetColor(Black,Green);
   cout << "Thread #"<<*x<<" gets the resource"<<endl;
   Sleep(900);  
   gCurrentIterations.increase();
   SetColor(Black,Green);
   cout << "Thread #"<<*x<<" sets the resource value to " << gCurrentIterations.get__inner() << endl;
   Sleep(100);
   ReleaseMutex(hMutex);
  }
  else {
   //job is done
   SetColor(Red,White);
   cout << "Thread #"<<*x<<" terminated"<<endl;
   break;
  }
 } else {
  //mutex unavailable
  Sleep(50);
  SetColor(Black,Red);
  cout<<"Thread #"<<*x<<" can not access to resource, retrying in 100 msecs"<<endl;
  Sleep(50);
 }
} while (true);
//while (gCurrentIterations.get__inner()<gRequiredIterations);
   return NULL;   

}
int _tmain(int argc, _TCHAR* argv[])
{
SetColor(Red,White);
cout << "Please set iteration count: ";
cin >> gRequiredIterations;
gCurrentIterations = __iterator();
hMutex=CreateMutex(NULL,FALSE,NULL);
unsigned int x=1;
_beginthreadex(NULL, 0, &threadFunc, &x, 0, 0);
unsigned int y=2;
_beginthreadex(NULL, 0, &threadFunc, &y, 0, 0);
int i;
cin >> i;
return 0;
}

нахуярил слипов, заебись теперь :D

Поделиться сообщением


Ссылка на сообщение

:opasnoste: :opasnoste: :opasnoste: :opasnoste: :opasnoste: :opasnoste: :opasnoste: :opasnoste: :opasnoste: :opasnoste: :opasnoste: :opasnoste: :opasnoste: :opasnoste:

 

 

 

поубирай нахуй все слипы и вместо 100 миллисекунд в WaitForSingleObject поставь INFINITE. Никакие потоки не должны срабатывать вперемешку

 

и зачем какой-то __iterator

 

что за пиздец там творится


Торжество разума в том, чтобы уживаться с теми, у кого этого разума нет. Вольтер.
Чтобы хорошо высыпаться, нужно спать 8 часов в день. И еще столько же ночью.

Поделиться сообщением


Ссылка на сообщение
(изменено)

если их убрать то все надписи впизду перемешаются

итератор это я родил для эвента :hmm:

пойду спать короч


Изменено пользователем justice_st

Поделиться сообщением


Ссылка на сообщение

они не могут перемешаться, они работают исключительно поочереди.

Сначала один поток, потом другой. Порядок их не определен, но сами строки будут вылазить целиком и полностью.


Торжество разума в том, чтобы уживаться с теми, у кого этого разума нет. Вольтер.
Чтобы хорошо высыпаться, нужно спать 8 часов в день. И еще столько же ночью.

Поделиться сообщением


Ссылка на сообщение
Гость
Эта тема закрыта для публикации сообщений.

×
×
  • Создать...