#16 TD
kliknu serverStart_Click pro nastartovani serveru pak client1Start_Click, client2Start_Click. server posila zpravy pomoci serverBroadcast_Click a klienti pomoci client1Send_Click a client2Send_Click. tam nic nepada a vsechno je asynchroni a nezamrza UI. neni osetrene to ze posilas zpravy na zavrene spojeni.
Příspěvky odeslané z IP adresy 77.92.213.–
#14 TD
jelikoz uz sem to psal mockrat tak uz se me to nechce psat nejak extra osetrene tady je nastrel jak to ma vypadat. jediny problem je tam v tom ze TCP neumoznuje detekovat vypadek spojeni nekde mezi clientem a serverem. na to se pouziva mechanismus "heartbeat" pripadne vyssi trida nez je tcp.
using System;
using System.Collections.Generic;
using System.IO;
using System.Net.Sockets;
using System.Threading.Tasks;
using System.Windows.Forms;
namespace Kecalek
{
public partial class Form1 : Form
{
private Dictionary<string, StreamWriter> clients = new Dictionary<string, StreamWriter>();
private TcpListener server;
private TcpClient client1;
private StreamWriter client1writer;
private TcpClient client2;
private StreamWriter client2writer;
public Form1()
{
InitializeComponent();
}
private void serverStart_Click(object sender, EventArgs e)
{
server = new TcpListener(789);
Task.Factory.StartNew(() =>
{
int i = 0;
server.Start(10);
Write("Server started");
while (true)
{
var clientAcceptedByServer = server.AcceptTcpClient();
var name = "Client" + ++i;
clients.Add(name,new StreamWriter(clientAcceptedByServer.GetStream()) {AutoFlush=true});
StartListening(clientAcceptedByServer, name);
}
});
}
private void StartListening(TcpClient serverClient, string name)
{
Write("Server accept " + name);
Task.Factory.StartNew(() =>
{
using (var reader = new StreamReader(serverClient.GetStream()))
{
while (true)
{
var data = reader.ReadLine();
if (data == null)
break;
Write(name + ": " + data);
}
Write("Server detect " + name + " is disconnected");
clients.Remove(name);
}
});
}
private void Write(string text)
{
if (InvokeRequired)
this.Invoke((Action) (() => listBox1.Items.Insert(0,text)));
else
listBox1.Items.Insert(0,text);
}
private void client1Start_Click(object sender, EventArgs e)
{
Task.Factory.StartNew(() =>
{
client1 = new TcpClient("localhost", 789);
client1writer = new StreamWriter(client1.GetStream());
client1writer.AutoFlush = true;
using (var reader = new StreamReader(client1.GetStream()))
{
while (true)
{
var data = reader.ReadLine();
if (data == null)
break;
Write("Client1 recieved:" + data);
}
}
Write("Client1 disconected");
});
}
private void serverBroadcast_Click(object sender, EventArgs e)
{
Write("Server broadcast message");
foreach (var client in clients.Values)
{
client.WriteLine("Message text");
}
}
private void client1Send_Click(object sender, EventArgs e)
{
Write("Client 1 sending message");
client1writer.WriteLine("Client1 text");
}
private void client2Start_Click(object sender, EventArgs e)
{
Task.Factory.StartNew(() =>
{
client2 = new TcpClient("localhost", 789);
client2writer = new StreamWriter(client2.GetStream());
client2writer.AutoFlush = true;
using (var reader = new StreamReader(client2.GetStream()))
{
while (true)
{
var data = reader.ReadLine();
if (data == null)
break;
Write("Client2 recieved:" + data);
}
}
Write("Client2 disconected");
});
}
private void client2Send_Click(object sender, EventArgs e)
{
Write("Client 2 sending message");
client2writer.WriteLine("Client2 text");
}
private void serverStop_Click(object sender, EventArgs e)
{
server.Stop();
foreach (var client in clients.Values)
client.Dispose();
}
private void client1Stop_Click(object sender, EventArgs e)
{
client1.Close();
}
private void client2Stop_Click(object sender, EventArgs e)
{
client2.Close();
}
}
}
#11 TD
1ni vlakno bude na UI (standartni hlavni vlakno jak je ted)
2he vlakno bude obsahovat nekonecny while a metodu AcceptTcpClient.
pokud 2 he vlakno prijme klienta tak nastartujes dalsi 2 vlakna jedno na cteni z klienta a druhe na zapis do klienta
vlakna startuj pres Task.Factory.StartNew(()=>{}); a parametry si predavej pres closure v lambdach
kapis?
#9 hlucheucho
a nastavil su tu pipu na asynchroni zpracovani v konstruktoru?
tady je kod co funguje pro pralalelni cteni i zapis (je to jen ukazka takze neni moc hezky)
static void Main(string[] args)
{
int serverMessage = 1;
int clientMessage = 1;
int sleepTime = 1;
int bulkWrite = 200;
int stopLimit = 5000;
object serverSyncRoot = new object();
object clientSyncRoot = new object();
Task.Factory.StartNew(() =>
{
var server = new NamedPipeServerStream("moje", PipeDirection.InOut, 1, PipeTransmissionMode.Byte, PipeOptions.Asynchronous);
Console.WriteLine("Server-connecting");
server.WaitForConnection();
Console.WriteLine("Server-connected");
Task.Factory.StartNew(() =>
{
using (var reader = new StreamReader(server))
{
while (true)
{
var rawMessage = reader.ReadLine();
int recievedMessage = Convert.ToInt32(rawMessage);
if (recievedMessage%bulkWrite == 0)
Console.WriteLine("Server-read: " + recievedMessage);
}
Console.WriteLine("Exiting server reader");
}
});
Task.Factory.StartNew(() =>
{
var writer = new StreamWriter(server);
writer.AutoFlush = true;
while (true)
{
Interlocked.Increment(ref serverMessage);
lock(serverSyncRoot)
writer.WriteLine(serverMessage);
if (serverMessage%bulkWrite == 0)
Console.WriteLine("Server-writer 1: " + serverMessage);
Thread.Sleep(sleepTime);
if (serverMessage > stopLimit)
break;
}
Console.WriteLine("Exiting server writer 1");
});
Task.Factory.StartNew(() =>
{
var writer = new StreamWriter(server);
writer.AutoFlush = true;
while (true)
{
Interlocked.Increment(ref serverMessage);
lock (serverSyncRoot)
writer.WriteLine(serverMessage);
if (serverMessage%bulkWrite == 0)
Console.WriteLine("Server-writer 2: " + serverMessage);
Thread.Sleep(sleepTime);
if (serverMessage > stopLimit)
break;
}
Console.WriteLine("Exiting server writer 2");
});
Thread.Sleep(Timeout.Infinite);
});
Task.Factory.StartNew(() =>
{
Console.WriteLine("Client-connecting");
var client = new NamedPipeClientStream("localhost", "moje", PipeDirection.InOut, PipeOptions.Asynchronous);
client.Connect();
Console.WriteLine("Client-connected");
Task.Factory.StartNew(() =>
{
using (var reader = new StreamReader(client))
{
while (true)
{
var rawMessage = reader.ReadLine();
int recievedMessage = Convert.ToInt32(rawMessage);
if (recievedMessage%bulkWrite == 0)
Console.WriteLine("Client-read: " + recievedMessage);
}
Console.WriteLine("Exiting client reader");
}
});
Task.Factory.StartNew(() =>
{
var writer = new StreamWriter(client);
writer.AutoFlush = true;
while (true)
{
Interlocked.Increment(ref clientMessage);
lock (clientSyncRoot)
writer.WriteLine(clientMessage);
if (clientMessage%bulkWrite == 0)
Console.WriteLine("Client-writer 1: " + clientMessage);
Thread.Sleep(sleepTime);
if (clientMessage > stopLimit)
break;
}
Console.WriteLine("Exiting client writer 1");
});
Task.Factory.StartNew(() =>
{
var writer = new StreamWriter(client);
writer.AutoFlush = true;
while (true)
{
Interlocked.Increment(ref clientMessage);
lock (clientSyncRoot)
writer.WriteLine(clientMessage);
if (clientMessage%bulkWrite == 0)
Console.WriteLine("Client-writer 2: " + clientMessage);
Thread.Sleep(sleepTime);
if (clientMessage > stopLimit)
break;
}
Console.WriteLine("Exiting server writer 2");
});
Thread.Sleep(Timeout.Infinite);
});
Console.WriteLine("Everything is started");
Console.ReadKey();
}
#1 motorcb
bud to nactes pres XmlDocument jak psal kit nebo takhle. kazdopadne bez toho prvniho radku to nepujde ani pres ten XmlDocument
Encoding.RegisterProvider(CodePagesEncodingProvider.Instance);
var client = new System.Net.Http.HttpClient();
var data = await client.GetByteArrayAsync("http://www.muzikus.cz/save/rss-windows-1250.xml");
var content = Encoding.GetEncoding(1250).GetString(data);
#1 BDS
fixed arrays je zabugovane. doporucuju pouzivat normalni pole s attributem o konstantni delce.
[StructLayout(LayoutKind.Sequential)]
internal class TestData
{
[MarshalAs(UnmanagedType.ByValArray, SizeConst = 6)]
public byte[] head;
[MarshalAs(UnmanagedType.ByValArray, SizeConst = 3)]
public char[] dataA;
[MarshalAs(UnmanagedType.ByValArray, SizeConst = 3)]
public char[] dataB;
public TestData()
{
head = new byte[6];
dataA = new char[3];
dataB = new char[3];
}
}
#1 Marek
protoze v pascalu se pri volani funkce parametry predavaji hodnotou. to znamena ze pokud zavolas funkci funkce1(parametr1) tak se do funkce1 posle KOPIE hodnoty, ktera je ulozena v te promene parametr1. to co chces ty se menuje predani parametru odkazem a dela se to
procedure plusone(var a: superType);
teoreticky jo ale prakticky bych to asi nedelal
muzes secky ty knihovny nahazet do resources a pri spusteni aplikaci v "release" rezimu je nacist z tech resources pomoci Assembly.Load
#1 anonym
jednoducha odpoved: NE
slozita odpoved:
windows phone telefony pouzivaji jazyk C#, android telefony Java, apple telefony ObjectiveC nebo Swift. normalne nejde napsat aplikaci ktera pobezi vsude. vyjimka jsou "multiplatformni" aplikace napsane pomoci napr. phonegapu coz je framework ve kterem se napise aplikace v javascriptu proti phonegap sdk a ta bezi na telefonu. pro pascal ciste nahodou take exituje neco podobneho jmenuje se to RAD STUDIO XE7 ale je to komercni a stoji to hodne penez. takze teoreticky ANO jde to.
#4 Matěj Andrle
1. nevim proc meles o opp kdyz to co popisujes neni oop ale architektonicky vzor.
2. action sis suploval dependency injection, takze si rozbil SOLID (single class responsibility) a princip znovupouzitelnosti
3. ignoraci designeru tak leda ignorujes RAD
4. kdyz uz sme u toho tak tvuj tetris zabira ~550 radku kodu a co mam nejake svoje stare kody tak u me to zabira ~900 radku kodu stim ze je to ve 3 rozmerech.
ale co ja vim ja se tomu nevenuju 7 let ...
#23 Kit
Java ani C# tě nenaučí programovat objektově.
- Oba 2 jazyky jsou objektove. Kdyz se v tom budes pohybovat kazdy den tak ti to snad casem blikne samo jak mas co delat.
- ZADNY jazyk ti nezaruci ze se naucis programovat "spravne". Kdyz si prase tak si prase v kazdem jazyce.
- Neni nahodou statisticky vetsi pravdepodobnost ze u rozsirenejsiho jazyka najdes kvalitnejsi material ke studiu?
#21 Kit
Lisp neznam to je pravda. Nepotrebuju znak kazdy programovaci jazyk co kdo vymyslel. Staci me umet par jazyku na profi urovni. Nevim jak souvisi znalost lispu a javy / c# (presneji nechapu frazi "Lisp tě naučí programovat")?
Proc ne lisp? A proc ne jazyk XYZ? Dalsim polemizovanim se dojde k a proc teda ne c# / java ktere jsou nejrozsirenejsi a nejuniverzalnejsi jazyky?
#19 Kit
v ERP nijak "aktivne" nevyuzijes funkcionalni programovani. nevim jak te lisp mauci lip programovat kdyz vzdycky delas v teamu nebo pouzivas knihovny, ktere jsou napsane podle konvenci dane platformy (jazyka).
ps: hlavne ze tebe to naucilo programovat. si dobre pamatuju co za prispevky pises
#1 matus
motas do sebe moc veci. zaprve to chce zvolit si "zakladni" jazyk. visual c++ je pro vykone aplikace a hry (neni uplne vhodny pro zacatecniky). doporucuju prejit na c#. pak bych si koupil knizku zaklady objektoveho programovani (zaklady oop) v c#. pak bych asi skousel neco programovat podle nejakych tutorialu na netu a pak bych asi presel na anglickou literaturu neco jako Professional C# 4.0 and .NET 4 (me se to docela libilo ale je mozne ze pro normalni lidi to bude trosku tezke cteni, ale zase je tam popsany v zakladech cely .net).
alternativne je mozne zvolit jako zakladni jazyk javu. volit neco jineho nez javu/c# (z ohledem na to ze chces delat desktop aplikace) bych nedoporucoval.
shrnuti: naucit se zaklady jazyka, naucit se oop, zacit v tom delat, udelat si sirsi prehled o dane platforme.
Budu končit se studiem VŠ a čeká mě hledání práce... Nyní se tedy nemohu rozhodnout jakou cestou se vydat.
To vidim jako prvni problem. Uz ve skole nekdy nazacatku sis mel vybrat/rozhodnout se jakou cestou chces jit a na tu se zamerit. Dobre placeni jsou vzdy jen specialiste.
Vzhledem k tomu, že studuji IT orientovanou školu, tak mám určité znalosti jak s administrací, tak s programováním.
Myslis skolni "dovednosti" nebo neco komercniho? Rozdil mezi skolnimy "vedomostmi" a praxi je propastny. Pracoval jsi pri skole?
var pom=unrar.Extract(zip, Core.PublicVariable.UltimaOnlinePath, getProgress, getLabelPercent, setAddText);
getLabelPercent.Invoke(new Action(() => getLabelPercent.Text = pom ));
vubec nevim co tu resite kdyz chyba je tady
getLabelPercent.Invoke(new Action(() => getLabelPercent.Text = unrar.Extract(zip, Core.PublicVariable.UltimaOnlinePath, getProgress, getLabelPercent, setAddText)));
celou metodu Extract si spustil pomoci invoke na GUI vlakne.
#7 Flowy
on chtel jazyky pro desktop aplikace.
#10 Honza
tak rozdili jsou dane spis zamerenim toho jazyka. jako mezi c# a java uz neni "tak velky rozdil" jako mezi c#/java a c++. c++ ma proste jine zamereni a to na rychle a optimalni kody. dan za to je ze musis resit "slozitě" pamet a dalsi neprijemne veci.
#5 Honza
pokud se odprostime od "exotickych jazyku" (ktere hlavne v ceskych koncinach maji velice tezke uplatneni), tak nam zbydou Java, C#, C++, Python. Pak zalezi na platforme pro kterou chces delat. Pokud te zajima jen windows tak je jasny C#.
Proti pythonu bych rekl to ze si jede svuj svet (docela odlisny od zbylych). Je to interpretovany (pomalejsi) jazyk bez staticke typove kontroly (vice chyb pri vyvoji aplikace). Na okna/formulare se musi pouzit nejaky externi GUI framework.
C++ je dobre pro aplikace kde potrebujes vykon, ale to se da resit separaci kritickeho kodu do c++ knihovny a nactenim te knihovny v jinem jazyce. V C++ jsou problem pointery a hlavne to ze to c++ standartne "nic nemumi" (neba to zakladni knihovny jako C# / JAVA). Na okna/formulare se musi pouzit nejaky externi GUI framework.
Java je klasika. Urcite neudelas chybu kdyz si vyberes javu. Je to multiplatformni a jede to vsude. Chyba je ze to neni tak pekne jak C#
C# je jasna volbo pro Windows aplikace. Pokud chces delat na Win/Linux/Mac tak je moznost pomoci mono+gtk#. (mono umozni beh kodu na linuxu a mac; vyvyji to komerni firma ale samotne mono je zdarma; melo by to uz byt hodne stabilni); (gtk# je framework pro GUI vrstvu co bezi na vsech 3 platformach).
Ja osobne volim C# z duvodu "asi nejpokrocilejsich" moznosti jazyka, pokryva to vsechny 3 dektopy+ vsechny 3 mobilni platformy, knihoven je dost a prijdou me jednoduche na pouziti, ma to dobre IDE - Visual Studio. A hlavne C# ma neco co se tezko popisuje je to takove tajne kouzlo dokonalosti ktere se neda slovy popsat
No nevim co by v takove knize bylo napsane xD. Na internetu je plno clanku ktere se "pokouseji" porovnat jazyky, ale vesmes jde o to, ze zalezi, co chces delat a podle toho si vybrat jazyk (hw, 3D, vypocty, okeni aplikace, weby).
#36 VitPet
no nejak nevim jak ti mame pomoct s prikazem otevrit soubor.
1. budto soubor neexistuje na dane adrese
2. adresa je spatne
3. nemas tam prava
4. soubor je prazdny
soude podle toho ze to pada az pri pokusu cteni tak typuju na variantu 4 coz uz ti psal kiv
#7 Matěj Andrle
je promin ze sem reagoval. chapu ze sem zaostaly a tak absolutne nechapu o cem pises. sem tak zaostali ze sem si musel googlit co znamena binarni mapa (v cestine to nenaslo nic a v anglictine bych si dovolil rict ze to nenaslo taky nic).
chapu ze sem idiot, ale pokud vim tak se v ramci .net nijak neresi endian (max tak vynucenim encodingu). endian se resi pouze v ramci interoperability s odlisnymi systemy.
no ja prave nevim proc resis endian.
pokud je to mala hra tak bych to vsecko nahazel do jednoho xml/json souboru a ukladal nacital pri spusteni aplikace pres serializaci.
pokud je to neco vetsiho tak klasickou databazi a tabulky.
Muzes to vice rozvest? Jake datove struktury chces presne ukladat, kolik ma zhruba jedna velikost, kolik jich zhruba bude celkem a jak casto se k nim bude pristupovat (cteni/zapis).
nejlepsi je oxyplot
http://oxyplot.org/
akorat to ted prevadeli z codeplexu na git takze tam bude asi zmatek.
#14 Matěj Andrle
libi se mne jak si hezky odpovedel . ne neznam jazyky a operacni systemy ktere nenajde ani google nebo je vytvoril nekdo v ramci svoji bakalarky/diplomky. a taky mas pravdu v tom ze bych se nemel hadat s clovekem co napise ze si udela OS v SQL
#10 Matěj Andrle
jako ja nvm ale pro me je pojem OS zhruba to co pisou na wiki
Operační systém je v informatice základní programové vybavení počítače (tj. software), které je zavedeno do paměti počítače při jeho startu a zůstává v činnosti až do jeho vypnutí. Skládá se z jádra (kernel) a pomocných systémových nástrojů. Hlavním úkolem operačního systému je zajistit uživateli možnost ovládat počítač, vytvořit pro procesy stabilní aplikační rozhraní (API) a přidělovat jim systémové zdroje. Operační systém je velmi komplexní software, jehož vývoj je mnohem složitější a náročnější, než vývoj obyčejných programů.
pokud se teda bude jednat o nejaky program ktery se nahraje na nejaky jednocip tak nevim jestli bych to tituloval vyrazem OS.
to co chces se menuje šablona a c++ to umi.
Me to prislo docela jasne popsane xD
Typically, in .Net 4 you just need to remove the 'Class' suffix and compile the code
zalezi jestli listbox wpf nebo winform ale myslim ze i ve winformu to de nastavit (akorat trochu slozitejc)
proc to chces resis textboxem ? podle me chces spis listbox :)
bod1 - resi se architekturou nebo convertorem nebo jinde v kodu
b2 - viz listbox, b3 - listbox umi, b4 - listbox umi.
pro zacetecniky a na "univerzalni" hry je nejlepsi Unity. ma to vsechny platformy, jazyk C# a zvlada to jak 2D tak 3D.
ale bez dobrych programatorskych znalosti neni moc realne ze bys tam neco udelal.
Podle me se ma vetsinou resit jen to "aby aplikace skoncila nejak srozumitelne" coz podle me neni ten pripad ze se ani nespusti .
To co te teda asi bude zajimat sou 2 eventy.
AppDomain.AssemblyResolve - kdyz vytvaris instanci typu nebo volas staticke fce tak se hleda v jakem dll je ten typ a pokud se to dll nenajde tak se vola tenhle event. ( http://msdn.microsoft.com/….110%29.aspx )
AppDomain.UnhandledException - proste kdyz to nekde spadne a nechytis to tak se vola toto. ( http://msdn.microsoft.com/….110%29.aspx )
Tak bez kodu ti toho asi moc nereknem :).
Jinak sem moc neslysel ze by se delalo osetrovani na chybejici zakladni soubory aplikace. Jako chapu kdyz je modularni ale moc nevidim smysl kontrolovat zakladni soubory.
chapes obrazek aspon ? (pls nesmejte se, 2 z vytvarky sem mel ve treti tride )
cislo sem nahradil promenou data typu řetězec pro vetsi nazornost (v realu string myslim nejde musi se pouzit char[] ale to je jedno na vysvetleni to snad staci)
no tak to pro tebe mam presne to co potrebujes. os zalozeny na C#
http://cosmos.codeplex.com/
predelal jsem to a volam tam i tu funkci
#include "stdafx.h"
#include <math.h>
#include <iostream>
#include <ctime>
#include <thread>
void fce(float* a, float* b, float* c, int from, int to){
for (int i = from; i < to; i++)
{
c[i] = (float)(log(a[i]) / sqrt(b[i]) + exp((a[i] + 1) / (b[i] - 1)));
}
}
int _tmain(int argc, _TCHAR* argv[])
{
int p = 0;
int repeat = 3;
while (repeat-- > 0)
{
int n = 20 * 1000 * 1000;
auto a = new float[n];
auto b = new float[n];
auto c = new float[n];
for (int i = 0; i < n; i++)
{
a[i] = i;
b[i] = i;
}
clock_t begin_time = clock();
for (int i = 0; i < n; i++)
{
c[i] = (float)(log(a[i]) / sqrt(b[i]) + exp((a[i] + 1) / (b[i] - 1)));
}
std::cout << "\nres: " << c[2] << " ela:" << float((clock() - begin_time)) / (CLOCKS_PER_SEC / 1000.0);
delete[] a;
delete[] b;
delete[] c;
a = new float[n];
b = new float[n];
c = new float[n];
for (int i = 0; i < n; i++)
{
a[i] = i;
b[i] = i;
}
begin_time = clock();
fce(a, b, c, 0, n);
std::cout << "\nres:F " << c[2] << " ela:" << float((clock() - begin_time)) / (CLOCKS_PER_SEC / 1000.0);
delete[] a;
delete[] b;
// VLAKNO
a = new float[n];
b = new float[n];
auto d = new float[n];
for (int i = 0; i < n; i++)
{
a[i] = i;
b[i] = i;
}
begin_time = clock();
std::thread t5(fce, a, b, d, 0, n );
t5.join();
std::cout << "\nres T: " << d[2] << " ela:" << float((clock() - begin_time)) / (CLOCKS_PER_SEC / 1000.0);
delete[] a;
delete[] b;
delete[] c;
delete[] d;
}
std::cout << "\nALL DONE";
std::cin >> p;
return 0;
}
vystup je tento
res: 20.5757 ela:680
res:F 20.5757 ela:346
res T: 20.5757 ela:367
res: 20.5757 ela:668
res:F 20.5757 ela:343
res T: 20.5757 ela:340
res: 20.5757 ela:653
res:F 20.5757 ela:336
res T: 20.5757 ela:333
ALL DONE
pokud ovsem zapoznamkuju kod od poznamky //VLAKNO tak jsou casi res a resF stejne okolo tech 340ms.
jako me jde spis o to, ze jak ma teda pak clovek vytvorit nejaky algoritmus, kdyz na takovehle "kravine" se mu jednou vykona program za 700ms a kdyz to napise ve forme funkce (coz by melo byt logicky o nejakou nanosekundu pomalejsi) tak mu to bezi 2x rychleji (jako kdyby to bylo par % ale 2x tolik). jako jak ma clovek pak neco udelat v tom c++
uprimne jednou jsem potreboval program co umi sloucit textove soubory do jednoho a da mezi ne oddelovac novy radek. po 2h hledani takoveho programu na netu sem si ho napsal na par radku jako konzolovku asi za 10 minut, takze doporucuji provest to same
upraveno vysledky porad stejny. nejaky jiny napad?
#include "stdafx.h"
#include <math.h>
#include <iostream>
#include <ctime>
#include <thread>
void fce(float* a, float* b, float* c, int from, int to){
for (int i = from; i < to; i++)
{
c[i] = (float)(log(a[i]) / sqrt(b[i]) + exp((a[i] + 1) / (b[i] - 1)));
}
}
int _tmain(int argc, _TCHAR* argv[])
{
int p = 0;
int repeat = 3;
while (repeat-- > 0)
{
int n = 20 * 1000 * 1000;
auto a = new float[n];
auto b = new float[n];
auto c = new float[n];
for (int i = 0; i < n; i++)
{
a[i] = i;
b[i] = i;
}
clock_t begin_time = clock();
for (int i = 0; i < n; i++)
{
c[i] = (float)(log(a[i]) / sqrt(b[i]) + exp((a[i] + 1) / (b[i] - 1)));
}
std::cout << "\nres: " << c[2] << " ela:" << float((clock() - begin_time)) / (CLOCKS_PER_SEC / 1000.0);
delete[] a;
delete[] b;
a = new float[n];
b = new float[n];
auto d = new float[n];
for (int i = 0; i < n; i++)
{
a[i] = i;
b[i] = i;
}
begin_time = clock();
std::thread t5(fce, a, b, d, 0, n );
t5.join();
std::cout << "\nres T: " << d[2] << " ela:" << float((clock() - begin_time)) / (CLOCKS_PER_SEC / 1000.0);
delete[] a;
delete[] b;
delete[] c;
delete[] d;
}
std::cout << "\nALL DONE";
std::cin >> p;
return 0;
}
Zdravim,
cely den si lamu hlavu nadtim, proc tento kod:
#include "stdafx.h"
#include <math.h>
#include <iostream>
#include <ctime>
#include <thread>
void fce(float* a, float* b, float* c, int from, int to){
for (int i = from; i < to; i++)
{
c[i] = (float)(log(a[i]) / sqrt(b[i]) + exp((a[i] + 1) / (b[i] - 1)));
}
}
int _tmain(int argc, _TCHAR* argv[])
{
int p = 0;
int repeat = 3;
while (repeat-- > 0)
{
int n = 20 * 1000 * 1000;
auto a = new float[n];
auto b = new float[n];
auto c = new float[n];
auto d = new float[n];
for (int i = 0; i < n; i++)
{
a[i] = i;
b[i] = i;
}
clock_t begin_time = clock();
for (int i = 0; i < n; i++)
{
c[i] = (float)(log(a[i]) / sqrt(b[i]) + exp((a[i] + 1) / (b[i] - 1)));
}
std::cout << "\nres: " << c[2] << " ela:" << float((clock() - begin_time)) / (CLOCKS_PER_SEC / 1000.0);
begin_time = clock();
std::thread t5(fce, a, b, d, 0, n );
t5.join();
std::cout << "\nres T: " << c[2] << " ela:" << float((clock() - begin_time)) / (CLOCKS_PER_SEC / 1000.0);
delete[] a;
delete[] b;
delete[] c;
delete[] d;
}
std::cout << "\nALL DONE";
std::cin >> p;
return 0;
}
ma v release (se zapnutyma sse2, jinak default; visual studio 2013) ma na mem notasu (ivy bridge i7; w8.1) tento vystup:
res: 20.5757 ela:728
res T: 20.5757 ela:329
res: 20.5757 ela:708
res T: 20.5757 ela:329
res: 20.5757 ela:704
res T: 20.5757 ela:332
ALL DONE
abych to popsal tak nechapu jak je mozne za ta stejna funkce kterou volam v cyklu trva prumerne 700ms, zatimco kdyz tuto uplne stejnou funkci spustim v thredu (pouze spustim to same v thredu nic nijak neparalelizuju) tak jak je mozne ze bezi cca 2x tak rychleji?
ja taky nechapu co tam delas, protoze prece neni mozne aby z c++ programu menil hodnoty adress jineho programu (coz je to o co se asi snazi). a pokud si menis hodnoty pameti ve svem vlastnim programu tak to bude asi neco spatne :).
protoze delas rekurzi. kdyz prehodis tyto radky naopak
System.out.println("run again " + c);
a(c);
tak budes mit vystup 2 3 4 5
nvm jak dlouho programujes nebo jake mas skusenosti. na zacatecnika je to podle me relativne dobre. ale chyb je tam docela dost.
1. podle me by ty parsovacky (int.parse) mely byt osetrene tak aby neshodili program (sam to tam mas naznacene pomoci toho default ze bys chtel pri nekorektni volbe zobrazit hlasku "nebyla spravna volba..."
2. ty parsovacky + switche si chtel dat asi do cyklu protoze pokud nekdo provede "konkretni operaci" tak se program ukonci a neni mozne ho pouzit "2x" po sobe
3. celkove si asi moc nepochopil ty objekty protoze tam nejak zmatene pouzivas operator new a vytvariz zbytecne 2x ty same objekty viz jako
Connect_to_DB novyKlient = new Connect_to_DB();novyKlient.InsertKlient(jmeno,prijmeni,login,heslo,osloveni);
Connect_to_DB kontrolaKlienta = new Connect_to_DB();
kontrolaKlienta.existenceKlienta(login, heslo);
u normalnich objektu to "moc" nevadi ale u napr u tridy ktera se stara o databazi je to uz problem. taky nikde neuzaviras to spojeni do databaze.
4. misto lokalnich promenych v metodach pouzivas privatni promene tridy a obcas dokonce prekryjes tu privatni -> lokalni.
5.
if (kontrolaKlienta.getExistenceKlienta() == null)
ty tu pouze porovnavas jestli je null a vysledek metody te nezajima, takze te zajimaji 2 stavy true a false, takze metoda by mela vracet bool a nvm jake jsou v jave konvence ale asi by se to melo pak jmenovat getIsClientExist (ten prefix Is pro bool typy)
6.
if ("Ano".equals(debet))
tady porovnavas "Ano" s odpovedi na otazku kdyz o vypis vis si napsal ze pripustne hodnoty jsou "[ano/ne]" takze teoreticky nikdy nedostanes true :). navic vyvaruj se primeho porovnani ale vzdy string preved bud na male nebo na velke a porovnavej to tak (metoda .toLowerCase()).
pokud myslis ten obrazek na stackoverflow diskuzi tak tam se nastavuji jen jazyky a ne kodovani.
#60 ekral
taky sem to nemohl vydrzet xD
#59 Kit
GC do toho vůbec netahej, s likvidací objektů nemá nic společného. Pouze defragmentuje paměť.
citace z wiki:
The basic principles of garbage collection are:
Find data objects in a program that cannot be accessed in the future.
Reclaim the resources used by those objects.
citace z MSDN (z topicu o zakladech GC):
When a finalizable object is discovered to be dead, its finalizer is put in a queue so that its cleanup actions are executed ....
coz se da cele interpterovat jakoze GC vyhledava neplatne objekty a spousti na nic destruktory.
tak to asi tezko xD
php je jazyk interpretovany zatimco c# pouziva JIT (muzeme povazovat za kompilovany). rozdily ve webech mezi php a asp.net nejsou nejak markantni, ovsem co se tyka vypocetnich veci je rozdil drasticky.
rozdil mezi C++ a C#/Java je asi 1.5-3x. rozdil mezi Java a PHP je tak +-50x.
(co clovek najde po zbeznem googleni)
http://blog.famzah.net/2010/07/01/cpp-vs-python-vs-perl-vs-php-performance-benchmark/
http://benchmarksgame.alioth.debian.org/u64q/benchmark.php?test=all&lang=php&lang2=java&data=u64q
no ale jak se to dela na windowsu ?
muzes me prosim hodit screenshot nebo napsat presne kde je to menu terminál ?
to se dela jak? ja prave nevim jak na to nebo jestli to vubec de.
az na to ze destruktory funguji dobre (spatne znamena ze nefunguji nebo buguji, to ze funguji jinak nez chces neznamena ze je to spatne).
a taky az na to ze presne do destruktoru se dava (v destruktoru se vola dispose) to zavirani souboru i C# ale dobry pokus xD
stisknutim tab se to nezobrazi - zobrazi se pouze cerny ctverec. me nejde o to konvertovat nazvy ale potrebuju ten symbol zobrazit na te prikazove radce.
ale ja to potrebuju zobrazit
Mam problem. Je vytvorena slozka ktera v nazvu obsahuje specialni UNICODE symbol a potrebuji tento symbol zobrazit v prikazovem radku (napr. pomoci prikazu dir). Nevite nekdo jak na to?
V exploreru/total comanderu se symbol zobrazuje, ale v prikazove radce ne. Zkousel jsem zmenit charset prikazove radky i font a nepomohlo.
a nejde to ani kdyz spustis celou aplikaci "jako administrátor" pres prave tlacitko mysi? z jakeho typu projektu to volas (silverlight ma treba omezene prava takze to ani myslim nejde napr.)?
if(this.temp instanceof Potomek01Trida) {
/****** ZDE CHCI MIT PRISTUP U OBJEKTU info k metode getText
System.out.println(((Potomek02Trida)info.temp).getText()); // nefunguje
temp2 = (Potomek02Trida) info.temp; // nefunguje
}
nema byt misto
if(this.temp instanceof Potomek01Trida) {
/****** ZDE CHCI MIT PRISTUP U OBJEKTU info k metode getText
System.out.println(((Potomek02Trida)info).getText()); // nefunguje
temp2 = (Potomek02Trida) info; // nefunguje
}
spis toto ?
a jak presne si predstavujes to vlozeni wf formulare do wpf okna ?
zminovat C# byla chyba
nvm co resis ze GC v C# funguje spatne kdyz v C# se deterministická destrukce resi pres using ( ale to uz se tu parkrat resilo :) ). GC je pouze k tomu aby ti resil uvolnovani objektu automaticky az uzna za vhodne sam.
Proto se v PHP vyhýbám složitějším výpočtům.
netvrdils este minuly tyden ze v php delas vsecko aj aplikace na klientovi?
(hehe buglo se vkladani prispevku a oseklo mi to prispevek stim charakterem )
Chtel jsem v konzoli zobrazit jakokoli z techto znaků http://www.charbase.com/block/miscellaneous-symbols
Zkousel jsem menit font conzole z rasteroveho na Consolas nebo Lucida Console ale to vyresilo jen par znaku. V kodu jsem zkousel Console.OutputEncoding na UTF8 nebo unicode a nepomohlo. Misto daneho symbolu se v konzoli vzdy objevi "??". Nevite nekdo co s tim?
Zdravim,
narazil jsem na docela zajimavy problem, ktery vyjimecne nevim jak vyresit. Mam konzolovou aplikaci a chtel bych v ni vypisovat "specialni" unicode znaky jako napr "
http://dev.mysql.com/doc/refman/5.6/en/features.html
Support for large databases. We use MySQL Server with databases that contain 50 million records. We also know of users who use MySQL Server with 200,000 tables and about 5,000,000,000 rows.
pokud se bojis o kapacitu tabulky tak bych se asi nebal. a proc ze to neresis pres where klauzuli?
pokud se ma neco pohybovat ve 2d osvedcili se me vektory pohybu namapovane primo na klavesy. zas pojem "dynamicky kod" co to je ? xD
podle me staci toto
public class FormView : Form
{
private FormPresenter presenter;
public FormView()
{
presenter = new FormPresenter();
KeyDown += FormView_KeyDown;
}
void FormView_KeyDown(object sender, KeyEventArgs e)
{
presenter.DoAction(new KeyStroke(e));
}
}
public class FormPresenter
{
private Dictionary<KeyStroke, Action> Actions { get; set; }
public FormPresenter()
{
Actions = new Dictionary<KeyStroke, Action>()
{
{new KeyStroke(Keys.W), () => MoveTo(new Size(0, -1))},
{new KeyStroke(Keys.A), () => MoveTo(new Size(-1, 0))},
{new KeyStroke(Keys.S), () => MoveTo(new Size(0, 1))},
{new KeyStroke(Keys.D), () => MoveTo(new Size(1, 0))},
{new KeyStroke(Keys.Space), () => Shot()},
};
}
private Point ActualPosition { get; set; }
public void Shot()
{ }
public void MoveTo(Size vector)
{
var newpos = Point.Add(ActualPosition, vector);
if (newpos.X < 0 || newpos.X > 100 || newpos.Y < 0 || newpos.Y > 100)
return;
ActualPosition = newpos;
}
public void DoAction(KeyStroke key)
{
if (Actions.ContainsKey(key))
Actions[key]();
}
}
public class KeyStroke : IEquatable<KeyStroke>
{
public bool IsCTRL { get; private set; }
public bool IsALT { get; private set; }
public Keys Key { get; private set; }
public KeyStroke(Keys key, bool isCtrl=false, bool isAlt=false)
{
IsCTRL = isCtrl;
IsALT = isAlt;
Key = key;
}
public KeyStroke(KeyEventArgs e)
{
IsCTRL = e.Control;
IsALT = e.Alt;
Key = e.KeyCode;
}
public bool Equals(KeyStroke other)
{
if (ReferenceEquals(null, other)) return false;
if (ReferenceEquals(this, other)) return true;
return IsCTRL.Equals(other.IsCTRL) && IsALT.Equals(other.IsALT) && Key == other.Key;
}
public override bool Equals(object obj)
{
if (ReferenceEquals(null, obj)) return false;
if (ReferenceEquals(this, obj)) return true;
if (obj.GetType() != this.GetType()) return false;
return Equals((KeyStroke) obj);
}
public override int GetHashCode()
{
unchecked
{
int hashCode = IsCTRL.GetHashCode();
hashCode = (hashCode*397) ^ IsALT.GetHashCode();
hashCode = (hashCode*397) ^ (int) Key;
return hashCode;
}
}
public static bool operator ==(KeyStroke left, KeyStroke right)
{
return Equals(left, right);
}
public static bool operator !=(KeyStroke left, KeyStroke right)
{
return !Equals(left, right);
}
}
co vytvorit tabulku logs, do ktere se budou zapisovat tyto zmeny (pokud chces trivialni informace tak staci jednoducha tabulka, pokud bys chtel zaznam co kde kdy tak staci pridat par sloupcu). informace do tabulky bud zapisovat programove, pres stored procedury, nebo trigery.
jako tady ten "hybrydni nepojmenovany vzor" co sem napsal nevyzaduje "zadne" eventy ani Action (callbacky). kdyz si das do Presenteru referenci na View (pres interface) tak to mas oddelene a muzes interagovat naprimo, zatimco ve View si das Primo referenci na Presenter, takze opet mas primou interakci a tridy jsou relativne oddelene. Pokud vim tak snad ani nejde udelat takove oddeleni aby skutecne doslo k "nezavyslosti" cele vrstvy View nebo cele vrstvy Presenter. Dycky ma nekdo zavislost na nekom.
ale tva otazka jestli misto event/actions pouzivat if me nejak porad neni jasna jak to presne spolu souvisi?
pojem 3 vrstva aplikace je taky takovy hezky "programatorsky obrat" ...
z popisu se nejspise snazis vytvorit nejakou multiplatformni aplikaci. doporucuji pouzit architekturu MVVM, ve ktere je mozne implementovat aplikace pro desktop/web/tablety/telefony. pokud se pouzije existujici MVVM framework tak je to uplna brnkacka. v MVVM se sdili vrstvy ViewModel a Model (vetsinou pomoci PCL), coz je vetsina bussines/aplikacniho kodu. platforme zavisle veci se dodavaji pomoci DependencyInjection. Vrstva View je vlastne "zakladni projekt" pro danou platformu. Obsahuje implementace Platforme závislých tříd + View třídy.
pokud ti z nejakeho duvodu nevyhovuje MVVM a z tveho skromneho popisu muzu pouze doporucit pouziti MVP nebo PM (ted sem stravil hodinu ctenim tech vzoru ale je v tom takovy zmatek ze fakt neni jasne co co dela, takze bych doporucil variantu, kdy ve View nic neni, secko je v Presenteru, Presenter vola View pres DI a View vyvolava akce na Presenteru primo).
interface ICustomerView
{
void DrawCustomerList(object customersList);
void DrawCustomerPhoto(int x, int y, object photodata);
}
class CustomerController
{
private ICustomerView view;
private object customersList;
public CustomerController(ICustomerView view)
{
this.view = view;
}
public void ShowCustomers()
{
//....
view.DrawCustomerList(customersList);
//....
}
public void SelectCustomer()
{
//....
view.DrawCustomerList(10, 20, customersList[1]);
//....
}
}
class CustomerView : Form, ICustomerView
{
private CustomerController controller;
public CustomerView()
{
controller = new CustomerController(this);
}
public void DrawCustomerList(object customersList)
{
throw new NotImplementedException();
}
public void DrawCustomerPhoto(int x, int y, object photodata)
{
throw new NotImplementedException();
}
public event Action Save;
protected virtual void OnSave()
{
Action handler = Save;
if (handler != null) handler();
}
public void OnClickShowCustomers()
{
controller.ShowCustomers();
}
}
jak spolu souvisi OOP a akce ? co je to ten pojem "akce". nevim jak souvisi "akce" s eventem a klavesami, kdyz jednim eventem de popsat cela klavesnice vcetne modifikatoru a plno dalsich veci.
je lepsi prikladat zdrojaky nez-li krasopisne popisovati problemy .
a jak si presne poznal ze to nejde pro jineho klienta ?
muzes jeste rozepsat SetBinding() ?
kdyz das break point na server metodu DownloadFile nekde na zacatek a zavolas druhy request behem stahovani prvniho souboru tak se stane co ?
a coze ma delat ten tvuj program presne ? s jakou pameti presne manipulujes? co to vlastne ma delat ?
pro tebe je nejjednoduzsi pouzit ten casovac nez thread a synchrnizovat to. z toho videa to musi byt jasne.
do timeru ontick napises
SpeedPosuvaci();
z tela te funkce odstranis jak ten cyklus while tak ty sleep
to checked changed zmenis na
if (checkBox1->Checked)
timer1.enabled=true;
else
timer1.enabled=false;